webpack 配置多页应用

115 阅读1分钟

一、配置有限多页应用

1.1 webpack config:

const HtmlWebpackPlugin = require('html-webpack-plugin'); 
module.exports = { 
  entry: { 
    app: './src/app.js', 
    admin: './src/admin.js', }, 
  plugins: [ 
    new HtmlWebpackPlugin({ 
      filename: 'index.html',
      chunks: ['app'] }), 
    new HtmlWebpackPlugin({ 
      filename: 'admin.html', 
      chunks: ['admin'] 
    }) 
  ], 
}

1.2 问题

上述配置会导致重复打包:假设 app.js 和 admin.js 都引入了 vue.js,那么 vue.js 的代码既会打包进 app.js,也会打包进 admin.js。我们需要使用 optimization.splitChunks将共同依赖单独打包成 common.js(HtmlWebpackPlugin 会自动引入 common.js)。

二、配置无限多页面

const HtmlWebpackPlugin = require('html-webpack-plugin')
const fs = require('fs')
const path = require('path')
const filenames = fs.readdirSync('./src/pages')
    .filter(file=>file.endsWith('.js'))
    .map(file=>path.basename(file,'.js'))
const entries = filenames.reduce((result,name)=>{
  (...result,[name]:`./src/pages/${name}.js`)
},{})
const plugins = filenames.map(name=>
  new HtmlWebpackPlugins({
    filename:name+'.html',
    chunks:[name]
  })
)

module.exports = {
  entry:{
    ...entries
  },
  plugins:{
    ...plugins
  }
}