const path = require('path') const fs = require('fs') // webpack.config.js const AutoImport = require('unplugin-auto-import/webpack') const Components = require('unplugin-vue-components/webpack') const { ElementPlusResolver } = require('unplugin-vue-components/resolvers') // Generate pages object const pages = {} function getEntryFile (entryPath) { let files = fs.readdirSync(entryPath) return files } const chromeName = getEntryFile(path.resolve(`src/entry`)) const iframeName = getEntryFile(path.resolve(`src/iframe`)) function getFileExtension (filename) { return /[.]/.exec(filename) ? /[^.]+$/.exec(filename)[0] : undefined } chromeName.forEach((name) => { const fileExtension = getFileExtension(name) const fileName = name.replace('.' + fileExtension, '') pages[fileName] = { entry: `src/entry/${name}`, template: 'public/index.html', filename: `${fileName}.html` } }) iframeName.forEach((name) => { const fileExtension = getFileExtension(name) const fileName = name.replace('.' + fileExtension, '') pages[fileName] = { entry: `src/iframe/${name}`, template: 'public/index.html', filename: `iframe/${fileName}.html` } }) const isDevMode = process.env.NODE_ENV === 'development' module.exports = { pages, filenameHashing: false, chainWebpack: (config) => { config.plugin('copy').use(require('copy-webpack-plugin'), [ { patterns: [ { from: path.resolve(`src/manifest.${process.env.NODE_ENV}.json`), to: `${path.resolve('dist')}/manifest.json` } ] } ]) }, configureWebpack: { output: { filename: `js/[name].js`, chunkFilename: `[name].js` }, devtool: isDevMode ? 'inline-source-map' : false, plugins: [ AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ], }, }