optimization.namedModules 这个配置对于调试起来很方便,比如原本生产的一段代码是长这样的:
(window["webpackJsonp"] = window["webpackJsonp"] || []).push([
[1],
[
/* 0 */
/***/
(function(module, exports, __webpack_require__) {
var utility2 = __webpack_require__(1);
var utility3 = __webpack_require__(2);
console.log(utility2 + utility3);
module.exports = "pageC";
/***/
}),
/* 1 */
/***/
(function(module, exports) {
module.exports = "utility2";
/***/
}),
/* 2 */
/***/
(function(module, exports) {
module.exports = "utility3";
/***/
})
],
[
[0, 0]
]
]);
很多奇怪的数字,比如最后几行的 [0,0] 是表示了什么意思?
如果配置上namedModules 为true呢 (当然 mode = development时,默认也是开启的),则打包成这样了:
(window["webpackJsonp"] = window["webpackJsonp"] || []).push([
["zpageC"], {
/***/
"./pageC.js":
/***/
(function(module, exports, __webpack_require__) {
var utility2 = __webpack_require__("./utility2.js");
var utility3 = __webpack_require__("./utility3.js");
console.log(utility2 + utility3);
module.exports = "pageC";
/***/
}),
/***/
"./utility2.js":
/***/
(function(module, exports) {
module.exports = "utility2";
/***/
}),
/***/
"./utility3.js":
/***/
(function(module, exports) {
module.exports = "utility3";
/***/
})
},
[
["./pageC.js", "pageInit"]
]
]);
最后几行的 [0,0] 被换成了["./pageC.js", "pageInit"],也更容易理解webpack打包出来的文件的加载机制了
此外单独配置一个 moduleIds:"named" (没有配置namedModules) 相当于 namedModules:true
moduleIds还可以使用 hashed选项:生产代码如下:
(window["webpackJsonp"] = window["webpackJsonp"] || []).push([
["zpageC"], {
/***/
"8QXy":
/***/
(function(module, exports, __webpack_require__) {
var utility2 = __webpack_require__("NcBz");
var utility3 = __webpack_require__("RpRB");
console.log(utility2 + utility3);
module.exports = "pageC";
/***/
}),
/***/
"NcBz":
/***/
(function(module, exports) {
module.exports = "utility2";
/***/
}),
/***/
"RpRB":
/***/
(function(module, exports) {
module.exports = "utility3";
/***/
})
},
[
["8QXy", "pageInit"]
]
]);
如果 强制设置了 namedModules:false ,那么 moduleIds:"*",将不会生效 ,
另外moduleIds还有 size, total-size 选项。
以上规则是对于module的,对于chunk,类似有一个 namedChunks/chunkIds 以及选项类同于namedModules/moduleIds,只不过是Chunks是针对于文件来说的,而且不支持hash形式
webpack 在前端工程中随处可见,当前流行的 vue, react, weex 等解决方案都推崇 webpack 作为打包工具。前端工具云集的时代,这是你值得选择的之一。
webpack是前端工程构建的一套工具,为什么一个程序称之为一套呢,是因为webpack其实是npm的一个模块,使用起来的话,这期间还需要很多其它模块来进行支持,所以我称之为一套工具。
本文从一个小Demo开始,通过不断增加功能来说明webpack的基本配置,只针对新手。webpack基本的配置就可以熟悉了,会引入loader,配置loader选项,会设置alias,会用plugins差不多。
Plugins是webpack的基础,我们都知道webpage的plugin是基于事件机制工作的,这样最大的好处是易于扩展。讲解如果扩展内置插件和其他插件,以及我们常用的Plugins插件
webpack技巧的总结:进度汇报、压缩、复数文件打包、分离app文件与第三方库文件、资源映射、输出css文件、开发模式、分析包的大小、更小的react项目、更小的Lodash、引入文件夹中所有文件、清除extract-text-webpack-plugin日志。
Webpack 作为目前最流行的前端构建工具之一,在 vue/react 等 Framework 的生态圈中都占据重要地位。在开发现代 Web 应用的过程中,Webpack 和我们的开发过程和发布过程都息息相关,如何改善 Webpack 构建打包的性能也关系到我们开发和发布部署的效率。
新版 Webpack 中我们所做的每一个更新目的都在于此,为了当大家在使用 Webpack 的时候敏捷连续毫无顿挫感。 webpack 4 进行构建性能测试,得出的结果非常有趣。结果很惊人,构建时间降低了 60%-98%!
Webpack 是一个现代 JavaScript 应用程序的模块打包器 (module bundler) 。当 Webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块
Tobias Koppers是一位自由软件开发者,家住德国纽伦堡。他因写出webpack这个已有数百万开发者使用的开源软件而名噪一时。他目前专注于JavaScript和开源项目。以下是我对他个人的专访,希望对大家有所启发。
本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。比如antd-mobilenpm包的引入。在不做特殊处理的前提下,样式文件将会被转译成css module。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!