eslint.js(二选一)
- npm install eslint eslint-loader -D (检验代码规范)
- npx eslint —init (初始化 eslint 配置文件 )
rules:[{test: /\.js$/,use:'eslint-loader',enforce: 'pre'},]
sourceMap (代码排查,调试错误)
- 开发环境使用: cheap-module-eval-source-map
- 生产环境使用: cheap-module-source-map
Tree-shaking & scopeHosting (生产环境)
- 在 package 文件中设置 “sideEffects”: “false”, 把副作用的数据删除掉
- “sideEffects”: [“*/.css”], 去除 css 文件
[ scopeHosting ] (自带)减少作用域
热更新
devServer: {port: 8081,open: true,compress: true,hot: true, // 热更新 仅更新更改的代码 局部刷新 减少数据请求数量},// webpack css 强制热更新插件new webpack.HotModuleReplacementPlugin(),let op = document.createElement('p');op.innerHTML = plus(10,5);document.body.appendChild(op)// js 代码的热更新if(module.hot) {module.hot.accept('./test',()=>{let plus = require('./test').default;op.innerHTML = plus(20,5);})}
注:当把 css 文件分离出后 热更新只执行一次 后续失效
懒加载(动态加载模块)
- webpackPrefetch 利用浏览器空闲时间,把动态模块加载完成并引入 前提:主要模块加载完成后
- webpackPreload 预加载 和主模块加载同时进行加载,不会引入
- webpackChunkName 文件名字
output: {filename: '[name].js',path: path.resolve(__dirname, 'dist'),// 动态模块名字 name 代表 01234chunkFilename:'[name].min.js'},import(/*webpackPrefetch:true*/'./test').then(({default:m})=>{op.innerHTML = m(20,50)});
打包文件分析工具 (生产环境)
- npm install webpack-bundle-analyzer
optimization.splitChunks
optimization: {minimizer: [new OptimizeCssAssetsPlugin()],splitChunks: {chunks: 'all', // 同异步 all 所有minSize: 30000, // 至少 30 kb 才去抽离maxSize: 0,minChunks: 1, // 至少抽离第三方模块 1 个maxAsyncRequests: 6, // 引入模块异步请求次数maxInitialRequests: 4, // 首屏加载的请求次数automaticNameDelimiter: '~', // 文件之间的连接符automaticNameMaxLength: 30,cacheGroups: { // 缓存组, 可以设置一些规则vendors: {test: /[\\/]node_modules[\\/]/,priority: -10 // 优先级},default: {minChunks: 2,priority: -20, // 优先级reuseExistingChunk: true}}}},
resolve 解析
- extensions 添加扩展名进行匹配
- alias 设置别名
resolve: {extensions: ['.js', '.jsx', '.json', '.css', '.ts', '.tsx', '.vue'],alias:{'@':path.resolve(__dirname,'src'),'test': path.resolve(__dirname,'src/test')}}
happypack
- npm install happypack -D (多线程打包,把不同的逻辑交给不同的线程处理)
根据 mode 分离配置环境
- webpack.base.js 公共配置
- webpack.dev.js 开发环境配置
- webpack.prod.js 生产环境配置
- package.json 文件的 scripts 属性中配置执行命令
- 开发环境打包: “dev”: “webpack —env.development —config./webpack.base.js”,
- 生产环境打包:”build”: “webpack —env.production —config./webpack.base.js”,
- 服务器: “dev-s”: “webpack-dev-server —env.development —config./webpack.base.js”
- npm install webpack-merge
图片压缩
- npm install image-webpack-loader -D
{test: /\.(gif|png|jpe?g|svg)$/i,use: ['file-loader',{loader: 'image-webpack-loader',options: {mozjpeg: {progressive: true,quality: 65 // 图片品质},// optipng.enabled: false will disable optipngoptipng: {enabled: false,},pngquant: {quality: [0.65, 0.90],speed: 4},gifsicle: {interlaced: false,},// the webp option will enable WEBPwebp: {quality: 75}}},],}
