1、开发环境优化
HMR(Hot Module Replacement模块热替换)--是webpack提供的最有用的功能之一,它容许在运行时更新各类模块,而无需进行彻底刷新。css
开启方法:在webpack.config.js中的devServer中加入hot参数--只能监听js文件的变化。html
devServer: { port: 8080, /*指定端口*/ compress: true, /*开启自动压缩*/ open: true, /*自动打开浏览器*/ hot: true /*开启模块热替换*/ }
监听html文件的改变,因htmL没有HMR功能,只须要在entry入口中引入html文件就行。node
entry: ['./index.js','./index.html']
对于样式的HMR功能,在开发环境中使用style-loader就行(打包时替换成mini-css-extract-plugin就行)webpack
module: { rules: [ { test: /\.css$/, use: ['style-loader','css-loader','postcss-loader'] } ] }
js也是默认没有HMR功能,所以只能处理非入口文件的js文件,解决办法:
启动hot后,module.hot接口就会暴露在index.js中,只须要在index.js中配置,告诉webpack接受HMR的模块就能够了。es6
if(module.hot){ /*告诉webpack接受热替换的模块*/ module.hot.accept('./[被监听的js的路径]',()=>{}) }
服务器检测到了js代码的变化就会执行module.hot.accept的回调函数web
2、生产环境优化
一、去除没有用到的js代码
webpack自带的tree-shaking在打包时可自动帮咱们去除实际上没有使用的js代码,可是必须知足如下使用条件:npm
a、必须使用es6模块化开发 b、打包mode使用production模式
二、去除没有用到的css代码
使用purgecss-webpack-plugin插件可去除无用css,经过mini-css-extract-plugin使用
a、安装浏览器
npm i purgecss-webpack-plugin -D
b、在webpack.config.js中配置服务器
const (resolve,join) = require('path'); /*node中的path.resolve()能够把一个路径或片断的序列解析为一个绝对路径,至关于cd操做*/ /*node中的path.join()能够将路径片断使用特定的分隔符'/'连接起来,并规范化造成路径*/ const glob = require('glob') /*glob是node的全局对象*/ const PATHS = {src: join(__dirname,'src')} const MiniCssExtractPlugin = require('mini-css-extract-plugin') const PurgecssPlugin = require('purgecss-webpack-plugin') /*引入插件*/ module.exports = { entry: './src/xxx.js', output: { filename: '[name].js', path: resolve(__dirname, 'dist') }, module: { relus: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader' ] } ] }, plugins: [ new MiniCssExtractPlugin({ filename: '[name].css' }), new PurgecssPlugin({ paths:glob.sync(`${PATHS.src}/**/*`,{nodir:true}) }) ] }