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