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.jsrequire("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 是否输出不同的颜色( 控制台的输出带颜色 )}};
