1️⃣ target
module.exports = {
target:"web" // 默认值
}
设置打包结果最终要运行的环境,常用值有
web:打包后的代码运行在 web 环境中
node:打包后的代码运行在 node 环境中
其他:https://www.webpackjs.com/configuration/target/
1️⃣ module.noParse
不解析正则表达式匹配的模块,通常用它来忽略那些大型的单模块库,以提高构建性能
解释 :大型的单文件库, 比如 jquery , jquery 的代码我们在使用时打包不需要再次经过 webpack 的解析过程, 就可以设置 **noParse:/jquery/**
就可以配置 webpack 在打包时忽略 jquery 的引用, jquery 的代码直接省略掉 webpack 的解析过程, 直接打包
module.exporets = {
noParse:/jquery/
}
1️⃣ resolve
resolve的相关配置主要用于控制模块解析过程
module.exports = {
resolve: {
alias: {
"@": path.resolve(__dirname, 'src'),
"_": __dirname
}
extensions: ['.js','.json']
modules: [resolves(__dirname, '../../node_modules'), 'node_modules']
}
}
2️⃣ alias
配置导入模块的路径别名
1. 优点:简写路径
2. 缺点:写路径没有提示
alias: {
"@": path.resolve(__dirname, 'src'),
"_": __dirname
}
有了alias(别名)后,导入语句中可以加入配置的键名,例如**require("@/abc.js")**
,webpack 会将其看作是**require(src的绝对路径+"/abc.js")**
在大型系统中,源码结构往往比较深和复杂,别名配置可以让我们更加方便的导入依赖
2️⃣ extensions
配置省略文件路径的后缀名 - 有同名文件时不推荐使用因为文件名一样时会出错
extensions: [".js", ".json"] // 默认值
当解析模块时,遇到无具体后缀的导入语句,例如**require("test")**
,会依次测试它的后缀名
1. 导入的 test 是 test.js 文件吗?
2. 如果是导入 test.js 如果不是
3. 导入的 test 是 test.json 文件吗?
4. 如果是导入 test.json 如果不是报错
如果有其他的后缀省略会依次遍历测试
2️⃣ modules
modules: ["node_modules"] // 默认值
当解析模块时,如果遇到导入语句,**require("test")**
,webpack 会从下面的位置寻找依赖的模块
1. 当前目录下的 `**node_modules**` 目录
2. 上级目录下的 `**node_modules**` 目录
modules 中的目录可更改,更改后 webpack 在解析时就会在更改的目录寻找依赖
1️⃣ externals
module.exports = {
externals: {
jquery: "$",
lodash: "_"
}
}
从最终的bundle中排除掉配置的配置的源码,例如,入口模块是
//index.js
require("jquery")
require("lodash")
生成的bundle是:
(function(){
...
})({
"./src/index.js": function(module, exports, __webpack_require__){
__webpack_require__("jquery")
__webpack_require__("lodash")
},
"jquery": function(module, exports){
//jquery的大量源码
},
"lodash": function(module, exports){
//lodash的大量源码
},
})
但有了上面的配置后,则变成了
(function(){
...
})({
"./src/index.js": function(module, exports, __webpack_require__){
__webpack_require__("jquery")
__webpack_require__("lodash")
},
"jquery": function(module, exports){
module.exports = $;
},
"lodash": function(module, exports){
module.exports = _;
},
})
这比较适用于一些第三方库来自于外部CDN的情况,这样一来,即可以在页面中使用CDN,又让 bundle 的体积变得更小,还不影响源码的编写
1️⃣ stats
stats控制的是构建过程中控制台的输出内容
1. [https://webpack.docschina.org/configuration/stats/#root](https://webpack.docschina.org/configuration/stats/#root)
module.exports = {
//...
stats: {
colors: true, // 告知 stats 是否输出不同的颜色( 控制台的输出带颜色 )
}
};