vue.config.js 3.0 KB

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