需安装插件:thread-loader
多进程打包:
进程启动大概为600ms,进程通信也有开销
只用工作消耗时间比较长,才需要多进程打包
webpack.config.js
const { resolve } = require('path')const MiniCssExtractPlugin = require('mini-css-extract-plugin')const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');const HtmlWebpackPlugin = require('html-webpack-plugin');const WorkboxWebpackPlugin = require('workbox-webpack-plugin')/*PWA:渐进式网络开发应用程序(离线可访问)workbox --> workbox-webpack-plugin*///定义nodejs环境变量:决定使用browserslist的哪个环境process.env.NODE_ENV = 'production'//复用loaderconst commonCssLoader = [MiniCssExtractPlugin.loader,'css-loader',{//还需要在package.json中定义browserslistloader: 'postcss-loader',options: {ident: 'postcss',plugins: () => [require('postcss-preset-env')()],}}]module.exports = {entry: './src/js/index.js',output: {filename: 'js/built.[contenthash:10].js',path: resolve(__dirname, 'build'),// publicPath: 'build'},module: {rules: [{//在package.json中eslintConfig --> airbnbtest: /\.js$/,exclude: /node_modules/,//优先执行enforce: 'pre',loader: 'eslint-loader',options: {fix: true}},{//以下loader只会匹配一个//注意:不能有两个配置 处理同一个文件oneOf: [{test: /\.css$/,use: [...commonCssLoader],},{test: /\.less$/,use: [...commonCssLoader, 'less-loader']},/*** 正常来讲,一个文件只能被一个loader处理* 当一个文件要被多个loader处理,那么一定要指定loader执行的先后顺序:* 先执行eslint 再执行babel*/{test: /\.js$/,exclude: /node_modules/,use:[/*多进程打包进程启动大概为600ms,进程通信也有开销只用工作消耗时间比较长,才需要多进程打包*/{loader:'thread-loader',options:{workers:2 //进程两个}},{loader: 'babel-loader',options: {presets: [['@babel/preset-env',{//按需加载useBuiltIns: 'usage',//指定core-js版本corejs: {version: 3},targets: {chrome: '60',firefox: '60',ie: '9',safari: '10',edge: '17'}}],],//开启babel缓存//第二次构建时,会读取之前的缓存cacheDirectory:true}}],},{test: /\.(jpg|png|gif)/,loader: 'url-loader',options: {limit: 8 * 1024,name: '[hash:10].[ext]',outputPath: '../imgs',esModule: false,}},{test: /\.html$/,loader: 'html-loader'},{exclude: /\.(js|css|less|html|jpg|png|gif)/,loader: 'file-loader',options: {outputPath: 'media',}}]}]},plugins: [new MiniCssExtractPlugin({filename: 'css/built.[contenthash:10].css'}),new OptimizeCssAssetsWebpackPlugin(),new HtmlWebpackPlugin({template: './src/index.html',minify: {collapseWhitespace: true,removeComments: true}}),new WorkboxWebpackPlugin.GenerateSW({/*** 1.帮助serviceworker快速启动* 2.删除旧的serviceworker** 生成serviceworker的配置文件*/clientsClaim:true,skipWaiting:true})],mode: 'production',devtool:'source-map'}
