UNPKG

vite-plugin-cos

Version:

A vite plugin for upload dist files to tencent cloud cos

104 lines (98 loc) 3.58 kB
'use strict'; const fs = require('fs-extra'); const COS = require('cos-nodejs-sdk-v5'); const color = require('picocolors'); const fastGlob = require('fast-glob'); const url = require('url'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; } const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); const COS__default = /*#__PURE__*/_interopDefaultLegacy(COS); const color__default = /*#__PURE__*/_interopDefaultLegacy(color); const fastGlob__default = /*#__PURE__*/_interopDefaultLegacy(fastGlob); const vitePluginUploadToCos = (options) => { let baseConfig = "/"; let buildConfig = {}; options = { removePrevious: false, ...options }; return { name: "vite-plugin-upload-to-cos", enforce: "post", apply: "build", configResolved(config) { baseConfig = config.base; buildConfig = config.build; }, closeBundle: async () => { const outDirPath = buildConfig.outDir || ""; const { pathname: cosBasePath, origin: cosOrigin } = new url.URL(baseConfig); const cos = new COS__default({ SecretId: options.secretId, SecretKey: options.secretKey }); const files = await fastGlob__default(outDirPath + "/**/*", { dot: true, ignore: options.ignore || ["**/node_modules/**"] }); if (options.removePrevious) { let list = await cos.getBucket({ Bucket: options.bucket, Region: options.region, Prefix: cosBasePath.replace(/^\//, "") }); if (list.Contents.length > 0) { let data = await cos.deleteMultipleObject({ Bucket: options.bucket, Region: options.region, Objects: list.Contents.map((item) => { return { Key: item.Key }; }) }); if (data.statusCode === 200) { console.log(color__default.green("[vite-plugin-upload-to-cos]"), "remove previous assets success"); } else { console.log(color__default.red("[vite-plugin-upload-to-cos]"), "remove previous assets failed"); } } } console.log(""); console.log(color__default.green("[vite-plugin-upload-to-cos]"), "upload start"); console.log(""); const startTime = new Date().getTime(); for (const fileFullPath of files) { const filePath = fileFullPath.split(outDirPath)[1]; const cosFilePath = cosBasePath.replace(/\/$/, "") + filePath; const completePath = cosOrigin + cosFilePath; const output = `${buildConfig.outDir + filePath} => ${color__default.green(completePath)}`; let canUpload = false; try { await cos.headObject({ Bucket: options.bucket, Region: options.region, Key: cosFilePath }); console.log(color__default.gray("[vite-plugin-upload-to-cos] existed in cos: "), filePath); } catch (e) { canUpload = true; } if (options.overwrite) { canUpload = true; } if (canUpload) { await cos.putObject({ Bucket: options.bucket, Region: options.region, Key: cosFilePath, Body: fs__default.readFileSync(fileFullPath), StorageClass: "STANDARD" }); console.log(output); } } const duration = (new Date().getTime() - startTime) / 1e3; console.log("cost time: " + duration + "s"); } }; }; module.exports = vitePluginUploadToCos;