VitePluginUploadPackage.js 3.8 KB

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