vue.config.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. const path = require('path')
  2. const fs = require('fs')
  3. const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')
  4. // webpack.config.js
  5. const AutoImport = require('unplugin-auto-import/webpack')
  6. const Components = require('unplugin-vue-components/webpack')
  7. const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
  8. const CopyWebpackPlugin = require('copy-webpack-plugin');
  9. const FilemanagerPlugin = require('filemanager-webpack-plugin');
  10. console.log('process.env.ZIP=', process.env.ZIP)
  11. // Generate pages object
  12. const pages = {}
  13. function getEntryFile(entryPath) {
  14. let files = fs.readdirSync(entryPath)
  15. return files
  16. }
  17. // const logoName = getEntryFile(path.resolve(`src/assets/logo`))
  18. // logoName.forEach((name) => {
  19. // const fileExtension = getFileExtension(name)
  20. // const fileName = name.replace('.' + fileExtension, '')
  21. // // console.log(`src/assets/logo/${name}`)
  22. // pages[fileName] = {
  23. // entry: `src/assets/logo/${name}`,
  24. // filename: `logo/${fileName}.png`
  25. // }
  26. // })
  27. const chromeName = getEntryFile(path.resolve(`src/entry`))
  28. const iframeName = getEntryFile(path.resolve(`src/iframe`))
  29. function getFileExtension(filename) {
  30. return /[.]/.exec(filename) ? /[^.]+$/.exec(filename)[0] : undefined
  31. }
  32. chromeName.forEach((name) => {
  33. const fileExtension = getFileExtension(name)
  34. const fileName = name.replace('.' + fileExtension, '')
  35. pages[fileName] = {
  36. entry: `src/entry/${name}`,
  37. template: 'public/index.html',
  38. filename: `${fileName}.html`
  39. }
  40. })
  41. iframeName.forEach((name) => {
  42. const fileExtension = getFileExtension(name)
  43. const fileName = name.replace('.' + fileExtension, '')
  44. pages[fileName] = {
  45. entry: `src/iframe/${name}`,
  46. template: 'public/index.html',
  47. filename: `iframe/${fileName}.html`
  48. }
  49. })
  50. const isDevMode = process.env.NODE_ENV === 'development'
  51. module.exports = {
  52. pages,
  53. filenameHashing: false,
  54. // chainWebpack: (config) => {
  55. // config.plugin('copy').use(require('copy-webpack-plugin'), [
  56. // {
  57. // patterns: [
  58. // {
  59. // from: path.resolve(`src/manifest.json`),
  60. // to: `${path.resolve('dist')}/manifest.json`
  61. // }
  62. // ]
  63. // }
  64. // ])
  65. // },
  66. configureWebpack: {
  67. resolve: {
  68. alias: {
  69. '@': path.resolve('src')
  70. },
  71. fallback: {
  72. fs: false
  73. }
  74. },
  75. output: {
  76. filename: `js/[name].js`,
  77. chunkFilename: `[name].js`
  78. },
  79. devtool: isDevMode ? 'inline-source-map' : false,
  80. plugins: [
  81. new NodePolyfillPlugin(),
  82. AutoImport({
  83. resolvers: [ElementPlusResolver()],
  84. }),
  85. Components({
  86. resolvers: [ElementPlusResolver()],
  87. }),
  88. new CopyWebpackPlugin({
  89. patterns: [
  90. {
  91. from: 'src/assets/logo',//想要复制的文件夹
  92. to: `${path.resolve('dist')}/logo` //复制在哪个文件夹
  93. },
  94. {
  95. from: path.resolve(`src/manifest.json`),
  96. to: `${path.resolve('dist')}/manifest.json`
  97. },
  98. {
  99. from: path.resolve(`src/rules`),
  100. to: `${path.resolve('dist')}/rules`
  101. }
  102. ]
  103. }),
  104. new FilemanagerPlugin({
  105. events: process.env.ZIP === 'TEST' ? {
  106. onEnd: {
  107. archive: [
  108. {
  109. format: 'zip',
  110. source: path.join(__dirname, 'dist'),
  111. destination: `dist.zip`,
  112. options: { zlib: { level: 6 } },
  113. },
  114. ],
  115. },
  116. } : {},
  117. }),
  118. ],
  119. },
  120. // 配置 content.css
  121. css: {
  122. extract: {
  123. filename: "css/[name].css"
  124. }
  125. }
  126. }