这是对应的 webpack config

  1. const HtmlWebpackPlugin = require('html-webpack-plugin')
  2. module.exports = {
  3. entry: {
  4. app: './src/app.js',
  5. admin: './src/admin.js',
  6. },
  7. plugins: [
  8. new HtmlWebpackPlugin({
  9. filename: 'index.html',
  10. chunks: ['app']
  11. }),
  12. new HtmlWebpackPlugin({
  13. filename: 'admin.html',
  14. chunks: ['admin']
  15. })
  16. ]
  17. }

但是这样配置会有一个重复打包的问题:假设 app.js 和 admin.js 都引入了 vue.js, 那么 vue.js 的代码既会打包进 app.js,也会打包进 admin.js。我们需要配置 optimization.splitChunks,将共同依赖单独打包成 common.js (HtmlWebpackPlugin 会自动引入 common.js)
参考文章

如何支持无限多页面?

遍历页面文件所在的文件夹,读取所有js文件名

  1. const HtmlWebpackPlugin = require('html-webpack-plugin')
  2. const fs = require('fs')
  3. const path = require('path')
  4. const filenames = fs.readdirSync(./src/pages)
  5. .filter(file => file.endsWith('.js'))
  6. .map(file => path.basename(file, '.js'))
  7. const entries = filename.reduce((result, name) => (
  8. {...result, [name]: `./src/pages/${name}.js`}
  9. ), {})
  10. const plugins = filenames.map((name) =>
  11. new HtmlWebpackPlugin({
  12. filename: name + '.html',
  13. chunks: [name]
  14. })
  15. )
  16. module.exports = {
  17. entry: {
  18. ...entries
  19. },
  20. plugins: [
  21. ...plugins
  22. ]
  23. }