vue.config.js 3.1 KB

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