我们都知道webpack的配置文件 webpack.config.js
文件中 mode
表示webpack当前的环境以及对不同的环境的配置。虽然官方文档写明了三种不同的模块的配置,但是没有具体说明是什么意思,我就注释一下对应的模块到底进行了什么操作。
development(开发模式)
下面是从官方上得到的开发模式的全部配置,
module.exports = {
+ mode: 'development',
- devtool: 'eval',
- cache: true,
- performance: {
- hints: false
- },
- output: {
- pathinfo: true
- },
- optimization: {
- namedModules: true,
- namedChunks: true,
- nodeEnv: 'development',
- splitChunks: {
- hidePathInfo: false,
- minSize: 10000,
- maxAsyncRequests: Infinity,
- maxInitialRequests: Infinity,
- },
- },
- plugins: [
- new webpack.NamedModulesPlugin(),
- new webpack.NamedChunksPlugin(),
- new webpack.DefinePlugin({ "process.env.NODE_ENV": JSON.stringify("development") }),
- ]
}
production(生产模式)
待补充
devtool和sourcemap相关介绍
JavaScript Source Map 详解(阮一峰的网络日志)
这个文章对source map的由来,生成map文件都进行了详细的说明。
Webpack中的sourcemap
这篇文章则重点是webpack上的sourcemap的生成,分析了devtool配置项目中的eval,inline,module,cheap关键字对sourcemap生成的影响,好文章,强烈推荐!
就我在上面文章基础上的理解是:eval确实是一种不同于生成.map文件的源码映射方法,它是一种映射在源码和压缩代码中间的方法,它映射的代码是经过webpack处理,但是又能看出源码一定模样的代码,虽然行数对应有问题,但是确定问题代码位置一般没有问题。适用于模块是自己写的项目中使用,如果模块不是自己写就不要使用eval相关模式生成的sourcemap了,找错代码更危险。
下面给出在chrome浏览器访问的eval源码的文件与实际源码的区别:
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, "default", function() { return printMe; });
function printMe() {
console.log("I get called from printfffff.js");
}
export default function printMe() {
console.log("I get called from printfffff.js");
}
output中的pathinfo参数是否开启的区别
下面依次是output中pathinfo为false和true时生成的bundle文件中的差异:bundle文件中包含的模块(文件)的注释信息,主要是文件对外暴露的方法名。
optimization.namedModules参数是否开启的区别
optimization.namedModules参数主要是控制 webpack 使用可读取模块标识符(readable module identifiers),来帮助更好地调试代码。目前在官方的例子上是使用在模块热替换这个功能中打印热替换时对应替换模块的id转成对应文件的名字。
下面是对应参数开启和关闭时效果的例子:
如果有其它使用的场景,欢迎交流,共同提高。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)