module.exports = { output: { filename: ‘[name].js‘, chunkFilename: ‘[name].chunk.js‘, path: path.resolve(__dirname, ‘../dist‘) } }
在看别人写的webpack,output配置项,肯跟会碰到chunkFilename这样的配置项,那这个是什么意思呢?filename和chunkFilename有什么区别呢?首先看个例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>html template</title> </head> <body> <div id=‘root‘></div> </body> </html>
index.js
async function getComponent() { const { default: _ } = await import(/* webpackChunkName:‘lodash‘ */‘lodash‘); const element = document.createElement(‘div‘); element.innerHTML = _.join([‘1‘, ‘2‘], ‘-‘); return element } document.addEventListener(‘click‘, ()=> { getComponent().then( element =>{ document.body.appendChild(element); }) })
webpack.common.js
module.exports = { entry: { main: ‘./src/index.js‘ }, output: { filename: ‘[name].js‘, chunkFilename: ‘[name].chunk.js‘, path: path.resolve(__dirname, ‘../dist‘) } }
运行npm run dev-build打包。打开dist目录,发现第三方模块打包好的名字叫vendors~lodash.chunk.js,不再是之前的vendors~lodash.js。我们的入口文件对应的都是filename的输出。如果不是入口文件,是异步引入或者间接产生的js文件,他就会走chunkFilename这个输出的配置参数。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>html template</title> </head> <body> <div id=‘root‘></div> </body> </html>
index.js
import ‘./style.css‘;
console.log(‘ hello world ‘);
style.css
body{ background: #abcdef; }
https://webpack.js.org/plugins/mini-css-extract-plugin
npm install --save-dev mini-css-extract-plugin
const merge = require(‘webpack-merge‘); const commonConfig = require(‘./webpack.common.js‘); const MiniCssExtractPlugin = require(‘mini-css-extract-plugin‘); const prodConfig = { mode: ‘production‘, devtool: ‘cheap-module-source-map‘, module: { rules:[{ test: /\.scss$/, use: [ MiniCssExtractPlugin.loader, { loader: ‘css-loader‘, options: { importLoaders: 2 } }, ‘sass-loader‘, ‘postcss-loader‘ ] },{ test: /\.css$/, use: [ MiniCssExtractPlugin.loader, ‘css-loader‘, ‘postcss-loader‘ ] }] }, plugins:[ new MiniCssExtractPlugin({}) ] } module.exports = merge(commonConfig, prodConfig);
然后对应到webpack.common.js里面删除css,scss相关到配置。运行npm run build。发现多出了两个文件main.css 和 main.css.map
npm install optimize-css-assets-webpack-plugin -D
const OptimizeCSSAssetsPlugin = require(‘optimize-css-assets-webpack-plugin‘); module.exports = { optimization: { minimizer: [new OptimizeCSSAssetsPlugin({})], }, }
https://webpack.js.org/plugins/mini-css-extract-plugin
optimization: { splitChunks: { cacheGroups: { styles: { name: ‘styles‘, test: /\.css$/, chunks: ‘all‘, enforce: true, // 忽略到前面到配置,不管是minSize,maxSize等等,只要是css,都打包到同一个文件中 }, }, }, },
原文:https://www.cnblogs.com/wzndkj/p/10849535.html