起一个webpack server预览我的项目
运行webpack-server服务器
webpack-dev-server --mode development --open
能够通过在package.json中配置script来简化命令
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "webpack-dev-server --mode development --open", "build": "webpack --mode production" }
配置热更新---HMR
const webpack = require('webpack')plugins: [ new webpack.HotModuleReplacementPlugin()],devServer: { hot: true}
在入口文件里增加热更新配置
// index.jsxif(module.hot) { module.hot.accept(error => { if(error) { console.log('HRM出BUG了') } })}
webpack性能优化
打包后果优化 & 构建速度优化
压缩代码
webpack自带了一个压缩plugin
const TerserPlugin = require('terser-webpack-plugin')module.exports = {// ... // 压缩代码选项 optimization: { minimizer: [new TerserPlugin({ // 放慢构建速度 cache: true, // 开启多线程 parallel: true, terserOptions: { // 移除无用代码 compress: { unused: true, drop_debugger: true, drop_console: true, dead_code: true } } })] }// ...}
webpack打包后果分析器
npm install webpack-bundle-analyzer
// webpack.config.js const BundleAnalyZerPlugin = require('webpack-bundle-analyzer').BundleAnalyZerPlugin // ... plugins: [ // ... new BundleAnalyZerPlugin() ] // ...
放慢构建速度的其余思路
// webpack.config.js// ... module: { // 优化解析工夫,跳过一些没有模块化的包,如不解析jquery noParse: /node_modules\/(jquery\.js)/, // 缩小查找 test: /\.jsx?/, exclude: /node_modules/, //优先级最高,排除某些文件 include: / / // 只打包某些文件 // 三者抵触时,exclude优先级最高 }// ...
多过程打包工具
HappyPack -- plugin(有局部loader不反对HappyPack)
thread-loader -- loader(须要写在所有loader后面)
Tree-Shaking(打消不好的js代码)
如引入的模块没有应用,webpack会检测这个模块,没有应用将不会被打包