为了正确使用和更方便地分发此配置,webpack 可以使用 `webpack.config.js` 进行配置。发送到 CLI 的任何参数都将映射到配置文件中的对应参数。
如果您还没有安装 webpack 和 CLI,请阅读 安装指南。
webpack-cli 提供了各种命令,使使用 webpack 更轻松。默认情况下,webpack 附带
命令 | 用法 | 描述 |
---|---|---|
build | build|bundle|b [entries...] [options] | 运行 webpack(默认命令,可以省略)。 |
configtest | configtest|t [config-path] | 验证 webpack 配置。 |
帮助 | help|h [命令] [选项] | 显示命令和选项的帮助信息。 |
info | info|i [选项] | 输出有关您系统的信息。 |
init | init|create|c|new|n [生成路径] [选项] | 初始化一个新的 webpack 项目。 |
loader | loader|l [输出路径] [选项] | 搭建一个 loader。 |
plugin | plugin|p [输出路径] [选项] | 搭建一个 plugin。 |
serve | serve|server|s [选项] | 运行 webpack-dev-server 。 |
版本 | version|v [命令...] | 输出 webpack 、webpack-cli 和 webpack-dev-server 的版本号。 |
watch | watch|w [入口...] [选项] | 运行 webpack 并监视文件更改。 |
运行 webpack(默认命令,可以省略)。
npx webpack build [options]
示例
npx webpack build --config ./webpack.config.js --stats verbose
用于初始化一个新的 webpack 项目。
npx webpack init [generation-path] [options]
示例
npx webpack init ./my-app --force --template=default
生成配置的路径。默认为 process.cwd()
。
-t
, --template
string = 'default'
要生成的模板名称。
-f
, --force
boolean
生成一个无需询问的项目。启用后,将使用每个问题的默认答案。
搭建一个 loader。
npx webpack loader [output-path] [options]
示例
npx webpack loader ./my-loader --template=default
输出目录的路径,例如 ./loader-name
。
-t
, --template
string = 'default'
模板类型。
搭建一个 plugin。
npx webpack plugin [output-path] [options]
示例
npx webpack plugin ./my-plugin --template=default
输出目录的路径,例如 ./plugin-name
。
-t
, --template
string = 'default'
模板类型。
输出有关您系统的信息。
npx webpack info [options]
示例
npx webpack info --output json --addition-package postcss
-a
, --additional-package
字符串
将额外的包添加到输出中。
示例
npx webpack info --additional-package postcss
-o
, --output
字符串:'json' | 'markdown'
以指定格式获取输出。
示例
npx webpack info --output markdown
验证 webpack 配置。
npx webpack configtest [config-path]
示例
npx webpack configtest ./webpack.config.js
您 webpack 配置文件的路径。默认为 ./webpack.config.js
。
运行 webpack 开发服务器。
npx webpack serve [options]
示例
npx webpack serve --static --open
运行 webpack 并监视文件更改。
npx webpack watch [options]
示例
npx webpack watch --mode development
默认情况下,webpack 附带以下标志
标志 / 别名 | 类型 | 描述 |
---|---|---|
--entry | 字符串[] | 您的应用程序的入口点,例如 ./src/main.js |
--config, -c | 字符串[] | 提供 webpack 配置文件的路径,例如 ./webpack.config.js |
--config-name | 字符串[] | 要使用的配置的名称 |
--name | 字符串 | 配置的名称。在加载多个配置时使用 |
--color | boolean | 在控制台上启用颜色 |
--merge, -m | boolean | 使用 webpack-merge 合并两个或多个配置 |
--env | 字符串[] | 当配置为函数时传递给配置的环境 |
--define-process-env-node-env | 字符串 | 将 process.env.NODE_ENV 设置为指定的值 |
--progress | 布尔值,字符串 | 在构建期间打印编译进度 |
--help | boolean | 输出支持的标志和命令列表 |
--output-path, -o | 字符串 | webpack 生成的文件的输出位置,例如 ./dist |
--target, -t | 字符串[] | 设置构建目标 |
--watch, -w | boolean | 监视文件更改 |
--watch-options-stdin | boolean | 当 stdin 流结束时停止监视 |
--devtool, -d | 字符串 | 控制是否以及如何生成源映射。 |
--json, -j | 布尔值,字符串 | 将结果打印为 JSON 或将其存储在文件中 |
--mode | 字符串 | 定义要传递给 webpack 的模式 |
--version, -v | boolean | 获取当前版本 |
--stats | 布尔值,字符串 | 它指示 webpack 如何处理统计信息 |
--disable-interpret | boolean | 禁用解释以加载配置文件。 |
--fail-on-warnings | boolean | 在 webpack 的警告出现时,使用非零退出代码停止 webpack-cli 进程 |
--analyze | boolean | 它调用 webpack-bundle-analyzer 插件以获取捆绑信息 |
--extends, -e | 字符串[] | 扩展现有配置 |
标志 | 描述 |
---|---|
--no-color | 禁用控制台上的任何颜色 |
--no-hot | 如果您通过配置启用了热重载,则禁用热重载 |
--no-stats | 禁用 webpack 发出的任何编译统计信息 |
--no-watch | 不要监视文件更改 |
--no-devtool | 不要生成源映射 |
--no-watch-options-stdin | 当 stdin 流结束时不要停止监视 |
从 CLI v4 和 webpack v5 开始,CLI 从 webpack 核心导入整个配置模式,以允许从命令行调整几乎所有配置选项。
以下是 webpack v5 与 CLI v4 支持的所有核心标志的列表 - 链接
例如,如果您想在项目中启用性能提示,您将在配置中使用 此 选项,使用核心标志,您可以执行 -
npx webpack --performance-hints warning
npx webpack [--config webpack.config.js]
有关配置文件中的选项,请参见 配置。
npx webpack --entry <entry> --output-path <output-path>
示例
npx webpack --entry ./first.js --entry ./second.js --output-path /build
一个文件名或一组命名文件名,它们充当构建项目的入口点。您可以传递多个条目(每个条目在启动时加载)。以下是通过 CLI 指定条目文件的多種方式 -
npx webpack --entry-reset ./first-entry.js
npx webpack --entry-reset --entry ./first-entry.js
npx webpack --entry-reset ./first-entry.js ./other-entry.js
npx webpack --entry-reset --entry ./first-entry.js ./other-entry.js
捆绑文件保存的路径。它将映射到配置选项 `output.path`。
示例
如果您的项目结构如下 -
.
├── dist
├── index.html
└── src
├── index.js
├── index2.js
└── others.js
npx webpack ./src/index.js --output-path dist
这将使用 `index.js` 作为入口捆绑您的源代码,输出捆绑文件将位于 `dist` 路径下。
asset main.js 142 bytes [compared for emit] [minimized] (name: main)
./src/index.js 30 bytes [built] [code generated]
./src/others.js 1 bytes [built] [code generated]
webpack 5.1.0 compiled successfully in 187 ms
npx webpack ./src/index.js ./src/others2.js --output-path dist/
这将使用这两个文件作为单独的入口点形成捆绑包。
asset main.js 142 bytes [compared for emit] [minimized] (name: main)
./src/index.js 30 bytes [built] [code generated]
./src/others2.js 1 bytes [built] [code generated]
./src/others.js 1 bytes [built] [code generated]
webpack 5.1.0 compiled successfully in 198 ms
CLI 将在您的项目路径中查找一些默认配置,以下是 CLI 拾取的配置文件。
这是按优先级递增顺序的查找顺序
例如 - 配置文件查找顺序为 .webpack/webpackfile > .webpack/webpack.config.js > webpack.config.js
'webpack.config',
'.webpack/webpack.config',
'.webpack/webpackfile',
列出 CLI 上可用的基本命令和标志
webpack help [命令] [选项]
和 webpack [命令] --help
都可以获取帮助
npx webpack --help
# or
npx webpack help
列出 CLI 支持的所有命令和标志
npx webpack --help=verbose
查看特定命令或选项的帮助
npx webpack help --mode
显示已安装包和子包的版本
要检查您正在使用的 `webpack` 和 `webpack-cli` 的版本,请运行以下命令
npx webpack --version
# or
npx webpack version
这将输出以下结果
webpack 5.31.2
webpack-cli 4.6.0
如果您安装了 `webpack-dev-server`,它也会输出 `webpack-dev-server` 的版本
webpack 5.31.2
webpack-cli 4.6.0
webpack-dev-server 3.11.2
要检查任何 `webpack-cli` 子包(如 `@webpack-cli/info`)的版本,请运行类似于以下的命令
npx webpack info --version
这将输出以下结果
@webpack-cli/info 1.2.3
webpack 5.31.2
webpack-cli 4.6.0
webpack-dev-server 3.11.2
使用配置文件构建源代码
指定一个与 `webpack.config.js` 不同的 配置 文件,`webpack.config.js` 是默认配置之一。
npx webpack --config example.config.js
如果您的配置文件导出多个配置,您可以使用--config-name
指定要运行的配置。
考虑以下webpack.config.js
module.exports = [
{
output: {
filename: './dist-first.js',
},
name: 'first',
entry: './src/first.js',
mode: 'development',
},
{
output: {
filename: './dist-second.js',
},
name: 'second',
entry: './src/second.js',
mode: 'development',
},
{
output: {
filename: './dist-third.js',
},
name: 'third',
entry: './src/third.js',
mode: 'none',
stats: 'verbose',
},
];
要仅运行second
配置
npx webpack --config-name second
您也可以传递多个值
npx webpack --config-name first --config-name second
您可以使用--merge
合并两个或多个不同的 webpack 配置。
npx webpack --config ./first.js --config ./second.js --merge
您可以使用--extends
扩展现有的 webpack 配置。
npx webpack --extends ./base.webpack.config.js
将 webpack 的结果打印为 JSON。
npx webpack --json
如果您想将统计信息存储为 json 而不是打印它,您可以使用 -
npx webpack --json stats.json
在所有其他情况下,webpack 会打印出一组统计信息,显示包、块和计时详细信息。使用此选项,输出可以是 JSON 对象。此响应被 webpack 的 analyse 工具、chrisbateman 的 webpack-visualizer 或 th0r 的 webpack-bundle-analyzer 接受。analyse 工具将接收 JSON 并以图形形式提供构建的所有详细信息。
当 webpack 配置 导出一个函数 时,可能会向其传递一个“环境”。
npx webpack --env production # env.production = true
--env
参数接受多个值
调用 | 结果环境 |
---|---|
npx webpack --env prod | { prod: true } |
npx webpack --env prod --env min | { prod: true, min: true } |
npx webpack --env platform=app --env production | { platform: "app", production: true } |
npx webpack --env foo=bar=app | { foo: "bar=app"} |
npx webpack --env app.platform="staging" --env app.name="test" | { app: { platform: "staging", name: "test" } |
除了上面显示的自定义 env
之外,env
下还有一些内置的 env
可在您的 webpack 配置中使用。
环境变量 | 描述 |
---|---|
WEBPACK_SERVE | 如果使用serve|server|s ,则为true 。 |
WEBPACK_BUILD | 如果使用build|bundle|b ,则为true 。 |
WEBPACK_WATCH | 如果使用--watch|watch|w ,则为true 。 |
请注意,您无法在捆绑代码中访问这些内置环境变量。
module.exports = (env, argv) => {
return {
mode: env.WEBPACK_SERVE ? 'development' : 'production',
};
};
您可以使用--node-env
选项设置process.env.NODE_ENV
,它对用户代码和webpack配置都可用。
npx webpack --node-env production # process.env.NODE_ENV = 'production'
适用于webpack-cli v5+
。
设置process.env.NODE_ENV
的--node-env
的别名。
npx webpack --define-process-env-node-env production # process.env.NODE_ENV = 'production'
参数 | 解释 | 输入类型 | 默认值 |
---|---|---|---|
--config | 配置文件的路径 | 字符串[] | 默认配置 |
--config-name | 要使用的配置的名称 | 字符串[] | - |
--env | 当配置为函数时传递给配置的环境 | 字符串[] | - |
您还可以使用webpack-bundle-analyzer
来分析由webpack发出的输出捆绑包。您可以使用--analyze
标志通过CLI调用它。
npx webpack --analyze
要检查任何webpack编译的进度,您可以使用--progress
标志。
npx webpack --progress
要收集进度步骤的配置文件数据,您可以将profile
作为值传递给--progress
标志。
npx webpack --progress=profile
要将参数直接传递给 Node.js 进程,可以使用 NODE_OPTIONS
选项。
例如,要将 Node.js 进程的内存限制增加到 4 GB
NODE_OPTIONS="--max-old-space-size=4096" webpack
此外,您还可以将多个选项传递给 Node.js 进程
NODE_OPTIONS="--max-old-space-size=4096 -r /path/to/preload/file.js" webpack
退出代码 | 描述 |
---|---|
0 | 成功 |
1 | 来自 webpack 的错误 |
2 | 配置/选项问题或内部错误 |
环境变量 | 描述 |
---|---|
WEBPACK_CLI_SKIP_IMPORT_LOCAL | 当 true 时,它将跳过使用本地 webpack-cli 实例。 |
WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG | 当 true 时,它将强制加载 ESM 配置。 |
WEBPACK_PACKAGE | 在 CLI 中使用自定义 webpack 版本。 |
WEBPACK_DEV_SERVER_PACKAGE | 在 CLI 中使用自定义 webpack-dev-server 版本。 |
WEBPACK_CLI_HELP_WIDTH | 使用自定义宽度显示帮助输出。 |
WEBPACK_CLI_FORCE_LOAD_ESM_CONFIG=true npx webpack --config ./webpack.config.esm
在 CLI 中使用自定义 webpack 版本。考虑 package.json
中的以下内容
{
"webpack": "^4.0.0",
"webpack-5": "npm:webpack@^5.32.0",
"webpack-cli": "^4.5.0"
}
要使用 webpack v4.0.0
npx webpack
要使用 webpack v5.32.0
WEBPACK_PACKAGE=webpack-5 npx webpack
您可能会在使用 TypeScript 中的原生 ESM(即 package.json
中的 type: "module"
)时遇到此错误。
webpack-cli
支持 CommonJS
和 ESM
格式的配置,首先它尝试使用 require()
加载配置,一旦它以 'ERR_REQUIRE_ESM'
(此情况下的特殊代码)的错误代码失败,它将尝试使用 import()
加载配置。但是,import()
方法在没有启用 加载器钩子(在 TypeStrong/ts-node#1007
中描述)的情况下无法与 ts-node
一起使用。
要修复上述错误,请使用以下命令
NODE_OPTIONS="--loader ts-node/esm" npx webpack --entry ./src/index.js --mode production
有关更多信息,请参阅我们关于 在 TypeScript
中编写 webpack 配置 的文档。