vue.config.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. // Generate pages object
  8. const pages = {}
  9. function getEntryFile (entryPath) {
  10. let files = fs.readdirSync(entryPath)
  11. return files
  12. }
  13. const chromeName = getEntryFile(path.resolve(`src/entry`))
  14. const iframeName = getEntryFile(path.resolve(`src/iframe`))
  15. function getFileExtension (filename) {
  16. return /[.]/.exec(filename) ? /[^.]+$/.exec(filename)[0] : undefined
  17. }
  18. chromeName.forEach((name) => {
  19. const fileExtension = getFileExtension(name)
  20. const fileName = name.replace('.' + fileExtension, '')
  21. pages[fileName] = {
  22. entry: `src/entry/${name}`,
  23. template: 'public/index.html',
  24. filename: `${fileName}.html`
  25. }
  26. })
  27. iframeName.forEach((name) => {
  28. const fileExtension = getFileExtension(name)
  29. const fileName = name.replace('.' + fileExtension, '')
  30. pages[fileName] = {
  31. entry: `src/iframe/${name}`,
  32. template: 'public/index.html',
  33. filename: `iframe/${fileName}.html`
  34. }
  35. })
  36. const isDevMode = process.env.NODE_ENV === 'development'
  37. module.exports = {
  38. pages,
  39. filenameHashing: false,
  40. chainWebpack: (config) => {
  41. config.plugin('copy').use(require('copy-webpack-plugin'), [
  42. {
  43. patterns: [
  44. {
  45. from: path.resolve(`src/manifest.${process.env.NODE_ENV}.json`),
  46. to: `${path.resolve('dist')}/manifest.json`
  47. }
  48. ]
  49. }
  50. ])
  51. },
  52. configureWebpack: {
  53. output: {
  54. filename: `js/[name].js`,
  55. chunkFilename: `[name].js`
  56. },
  57. devtool: isDevMode ? 'inline-source-map' : false,
  58. plugins: [
  59. AutoImport({
  60. resolvers: [ElementPlusResolver()],
  61. }),
  62. Components({
  63. resolvers: [ElementPlusResolver()],
  64. }),
  65. ],
  66. },
  67. }