其他细节配置 {ignore}

context

context: path.resolve(__dirname, “app”)

该配置会影响入口和loaders的解析,入口和loaders的相对路径会以context的配置作为基准路径,这样,你的配置会独立于CWD(current working directory 当前执行路径)


output

(1)library

library: “abc”

这样一来,打包后的结果中,会将自执行函数的执行结果暴露给abc。

(2)libraryTarget

libraryTarget: “var”

该配置可以更加精细的控制如何暴露入口包的导出结果。
其他可用的值有:


target

target:”web” //默认值

设置打包结果最终要运行的环境,常用值有


module.noParse

noParse: /jquery/

不解析正则表达式匹配的模块,通常用它来忽略那些大型的单模块库,以提高构建性能。


resolve

resolve的相关配置主要用于控制模块解析过程

(1)modules

modules: [“node_modules”] //默认值

当解析模块时,如果遇到导入语句,require("test"),webpack会从下面的位置寻找依赖的模块

  1. 当前目录下的node_modules目录
  2. 上级目录下的node_modules目录
  3. (2)extensions

    extensions: [“.js”, “.json”] //默认值

当解析模块时,遇到无具体后缀的导入语句,例如require("test"),会依次测试它的后缀名

  • test.js
  • test.json

    (3)alias

    alias: { “@”: path.resolve(dirname, ‘src’), “_”: dirname }

有了alias(别名)后,导入语句中可以加入配置的键名,例如require("@/abc.js"),webpack会将其看作是require(src的绝对路径+"/abc.js")
在大型系统中,源码结构往往比较深和复杂,别名配置可以让我们更加方便的导入依赖

externals

externals: { jquery: “$”, lodash: “_” }

从最终的bundle中排除掉配置的配置的源码,例如,入口模块是

  1. //index.js
  2. require("jquery")
  3. require("lodash")

生成的bundle是:

  1. (function(){
  2. ...
  3. })({
  4. "./src/index.js": function(module, exports, __webpack_require__){
  5. __webpack_require__("jquery")
  6. __webpack_require__("lodash")
  7. },
  8. "jquery": function(module, exports){
  9. //jquery的大量源码
  10. },
  11. "lodash": function(module, exports){
  12. //lodash的大量源码
  13. },
  14. })

但有了上面的配置后,则变成了

  1. (function(){
  2. ...
  3. })({
  4. "./src/index.js": function(module, exports, __webpack_require__){
  5. __webpack_require__("jquery")
  6. __webpack_require__("lodash")
  7. },
  8. "jquery": function(module, exports){
  9. module.exports = $;
  10. },
  11. "lodash": function(module, exports){
  12. module.exports = _;
  13. },
  14. })

这比较适用于一些第三方库来自于外部CDN的情况,这样一来,即可以在页面中使用CDN,又让bundle的体积变得更小,还不影响源码的编写


stats

stats控制的是构建过程中控制台的输出内容。