vue.config.js 1.5 KB

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