webpack.config.js解析
1 entry
entry 对象是用于 webpack 查找启动并构建 bundle。其上下文是入口文件所处的目录的绝对路径的字符串。
|
|
|
|
|
|
2 output object
output对象
|
|
注意output.path提供打包后的文件存放的绝对路径地址 ; output.filename提供了打包后文件的名字;
3 module
这些选项决定了如何处理项目中的不同类型的模块。
loader 用于对模块的源代码进行转换。loader 可以使你在 require() 或”加载”模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你在 JavaScript 中 require() CSS文件!
|
|
|
|
如何使用loaders有以下三种方式
- 通过配置
- 在
require语句中显示使用 - 通过 CLI
通过 webpack.config.js
module.rules 允许你在 webpack 配置中指定几个 loader。 这是展示 loader 的一种简明的方式,并且有助于使代码变得简洁。而且对每个相应的 loader 有一个完整的概述。
|
|
通过 require
可以在 require 语句(或 define, require.ensure, 等语句)中指定 loader。使用 ! 将资源中的 loader 分开。分开的每个部分都相对于当前目录解析。
|
|
通过前置所有规则及使用 !,可以对应覆盖到配置中的任意 loader。
选项可以传递查询参数,就像在 web 中那样(?key=value&foo=bar)。也可以使用 JSON 对象(?{"key":"value","foo":"bar"})。
尽可能使用
module.rules,因为这样可以在源码中减少引用,并且可以更快调试和定位 loader,避免代码越来越糟。
通过 CLI
可选项,你也可以通过 CLI 使用 loader:
|
|
这会对 .jade 文件使用 jade-loader,对 .css 文件使用 style-loader 和 css-loader
4 plugins
由于 plugin 可以携带参数/选项,你必须在 wepback 配置中,向 plugins 属性传入 new 实例。
根据你如何使用 webpack,这里有多种方式使用插件。
|
|
5 target
因为服务器和浏览器代码都可以用 JavaScript 编写,所以 webpack 提供了多种构建目标(target),你可以在你的 webpack 配置中设置。
高速webpack这个程序的目标环境是什么
尽管 webpack 不支持向 target 传入多个字符串,你可以通过打包两份分离的配置来创建同构的库:
|
|
target描述
async-node编译为类 Node.js 环境可用(使用 fs 和 vm 异步加载分块)
atomelectron-main 的别名
electron``electron-main 的别名
electron-main编译为 Electron 渲染进程,使用 JsonpTemplatePlugin, FunctionModulePlugin 来为浏览器环境提供目标,使用 NodeTargetPlugin 和 ExternalsPlugin 为 CommonJS 和 Electron 内置模块提供目标。
node编译为类 Node.js 环境可用(使用 Node.js require 加载 chunk)
node-webkit编译为 Webkit 可用,并且使用 jsonp 去加载分块。支持 Node.js 内置模块和 nw.gui 导入(实验性质)
web编译为类浏览器环境里可用(默认)
webworker编译成一个 WebWorker
例如,当 target 设置为 "electron",webpack 引入多个 electron 特定的变量。有关使用哪些模板和 externals 的更多信息,你可以直接参考 webpack 源码。
6 命令
- 如果存在
webpack.config.js,webpack命令将默认选择使用它 - 通过npm配合使用,改变package.json文件
|
|
或者
|
|