VitePluginUploadPackage.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /* eslint-disable */
  2. import { loadEnv } from 'vite'
  3. import archiver from 'archiver'
  4. import fs from 'fs'
  5. import OSS from 'ali-oss'
  6. import { format } from 'date-fns'
  7. import { Buffer } from 'node:buffer'
  8. import COS from 'cos-nodejs-sdk-v5'
  9. async function ossUpload(filePath, version) {
  10. let client = new OSS({
  11. accessKeyId: 'PXzJyah5rZfWHIIH',
  12. accessKeySecret: 'e1MS6j0wypXJrw8CM0hObZu8qKbfah',
  13. region: 'oss-cn-hangzhou',
  14. bucket: 'zm-shorts'
  15. })
  16. let { url } = await client.put(`packages/${format(new Date(), 'yyyyMMddHHmmss')}.zip`, filePath, {
  17. headers: {
  18. 'x-oss-object-acl': 'public-read'
  19. }
  20. })
  21. url = url.replace('http://', 'https://')
  22. console.log('package uploaded: %s', url.replace('http://', 'https://'))
  23. await client.put('packages/freeshort/meta.json', Buffer.from(JSON.stringify({ url, version: version })), {
  24. headers: { 'x-oss-object-acl': 'public-read' }
  25. })
  26. }
  27. async function cosUpload(filePath, version) {
  28. var cos = new COS({
  29. SecretId: 'IKIDhOGOYkw59GUh0FMONLJKPLGfzJ5oeaWO',
  30. SecretKey: 'sfSC9ACC9zjVK7BMUew8SmEdtBgDi6dI'
  31. })
  32. const url = await new Promise((resolve, reject) => {
  33. cos.putObject(
  34. {
  35. Bucket: 'duanju2-1321229830',
  36. Region: 'ap-jakarta',
  37. Key: `packages/${format(new Date(), 'yyyyMMddHHmmss')}.zip`,
  38. StorageClass: 'STANDARD',
  39. Body: fs.createReadStream(filePath),
  40. ACL: 'public-read'
  41. },
  42. function (err, data) {
  43. if (err) reject(err)
  44. else resolve('https://' + data.Location)
  45. }
  46. )
  47. })
  48. console.log('package uploaded: %s', url)
  49. await new Promise((resolve, reject) => {
  50. cos.putObject(
  51. {
  52. Bucket: 'duanju2-1321229830',
  53. Region: 'ap-jakarta',
  54. Key: 'packages/freeshort/meta.json',
  55. StorageClass: 'STANDARD',
  56. Body: Buffer.from(JSON.stringify({ url, version: version })),
  57. ACL: 'public-read'
  58. },
  59. function (err, data) {
  60. if (err) reject(err)
  61. else resolve(data)
  62. }
  63. )
  64. })
  65. }
  66. export default function VitePluginUploadPackage() {
  67. let mode = ''
  68. let env = {}
  69. return {
  70. name: 'upload-package',
  71. config(config, { command }) {
  72. mode = config.mode
  73. env = loadEnv(mode, process.cwd())
  74. },
  75. async closeBundle(options) {
  76. if (env['VITE_APP'] !== 'true') return
  77. const meta = JSON.parse(fs.readFileSync('./src/assets/meta.json'))
  78. const sourceDir = 'dist'
  79. const outputFilePath = 'dist.zip'
  80. await new Promise((resolve, reject) => {
  81. const output = fs.createWriteStream(outputFilePath)
  82. output.on('close', function () {
  83. resolve()
  84. })
  85. const archive = archiver('zip')
  86. archive.pipe(output)
  87. archive.directory(sourceDir, false)
  88. archive.finalize()
  89. }).catch(e => {
  90. console.log(e)
  91. })
  92. switch (env['VITE_STORAGE_TYPE']) {
  93. case 'oss':
  94. await ossUpload(outputFilePath, meta.version)
  95. break
  96. case 'cos':
  97. await cosUpload(outputFilePath, meta.version)
  98. break
  99. }
  100. }
  101. }
  102. }