一、优化打包构建速度
HMR
HMR:hot modulle replacement,热模块替换
1.解决的问题
修改部分模块代码,只会重新打包修改的模块代码,不会将全部文件重新打包,提高构建速度
2.开启HMR功能
在devServe中将hot设置为true
devServer: { //自动更新,只会在内存中编译打包,不会有任何输出,下载指令:npm i webpack-dev-server //运行指令:npx webpack-dev-server contentBase: resolve(__dirname, 'build'),//构建后的路径 compress: true,//启动gzip压缩 port: 3000, open: true, hot:true//开启HMR }
3.需要注意的问题
(1)样式文件:
可以使用HMR功能,style-loader内部已经实现
(2)js文件:
默认不能使用HMR,如果需要使用则修改js代码,添加支持HMR的代码
在js文件中:
例如: if (module.hot) {//module.hot为true,说明开启了HMR功能 module.hot.accept('./js/a.js', function () { //function方***监听前面./js/a.js这个文件的变化,一旦发生变化,其他的模块不会重新打包构建,而是执行这个回调函数 console.log(add(1, 7)) }) }
(3)html文件:
默认不能使用HMR,并且如果开启HMR,热更新会失效,并且不需要做HMR功能
二、优化代码调试
source-map
1.source-map
是一种提供源代码映射到构建后代码的技术,如果构建后的代码出错,可以通过映射追踪到源代码的错误,方便调试
2.使用:
在webpack.config.js中设置:
devtool: 'source-map'
3.属性值介绍
(1)内联和外部的区别:
1)外部生成了source-map文件,内联没有
2)内联构建速度更快
(2)devtool的属性值
1)source-map:外部
有准确的错误代码信息有源代码的错误位置
2)inline-source-map:内联,只生成一个内联source-map
有准确的错误代码信息有源代码的错误位置
3)hidden-source-map:外部(只能看见构建后的代码,不能看见源代码)
有准确的错误代码信息没有源代码的错误位置,只能提示到构建后的源代码错误
4)eval-source-map:内联
每一个文件都生成对应的source-map,并且都在eval函数中有准确的错误代码信息有源代码的错误位置
5)nosource-source-map:外部(隐藏了源代码和构建后的代码)
有准确的错误代码信息没有任何源代码的错误信息
6)cheap-source-map:外部
有准确的错误代码信息有源代码的错误位置,但是只能精确到哪一行,不能精确到具体出错的代码
7)cheap-moudle-source-map
有准确的错误代码信息有源代码的错误位置module会将loader的source-map也加入
(3)使用source-map需要考虑的问题
1)开发环境方面:速度快、调试更加友好
速度:eval>inline>cheap调试:source-map>cheap-module-source-map>cheap-source-map
综合可使用:eval-source-map(vue\react框架默认使用) eval-cheap-moudle-source-map
2)生产环境:代码要不要隐藏(内联会让代码体积变大,所以在生产环境不用内联)
综合可使用:source-map cheap=module-source-map