ä¸ºäºæ´åé䏿¹ä¾¿å°ä½¿ç¨é
ç½®ï¼å¯ä»¥å¨ webpack.config.js ä¸å¯¹ webpack è¿è¡é
ç½®ãCLI ä¸ä¼ å
¥çä»»ä½åæ°ä¼å¨é
ç½®æä»¶ä¸æ å°ä¸ºå¯¹åºçåæ°ã
å¦æä½ è¿æ²¡æå®è£ è¿ webpack å CLIï¼è¯·å é 读 å®è£ æåã
webpack-cli æä¾äºè®¸å¤å½ä»¤æ¥ä½¿ webpack çå·¥ä½å徿´ç®åãé»è®¤æ åµä¸ï¼webpack æä¾äºä»¥ä¸å½ä»¤ï¼
| Command | Usage | Description |
|---|---|---|
build | build|bundle|b [entries...] [options] | Run webpack (default command, can be omitted). |
configtest | configtest|t [config-path] | Validate a webpack configuration. |
help | help|h [command] [option] | Display help for commands and options. |
info | info|i [options] | Outputs information about your system. |
init | init|create|c|new|n [generation-path] [options] | Initialize a new webpack project. |
loader | loader|l [output-path] [options] | Scaffold a loader. |
plugin | plugin|p [output-path] [options] | Scaffold a plugin. |
serve | serve|server|s [options] | Run the webpack-dev-server. |
version | version|v [commands...] | Output the version number of webpack, webpack-cli and webpack-dev-server. |
watch | watch|w [entries...] [options] | Run webpack and watch for files changes. |
è¿è¡ webpackï¼é»è®¤å½ä»¤ï¼å¯ç¨è¾åºæä»¶ï¼ã
npx webpack build [options]示ä¾
npx webpack build --config ./webpack.config.js --stats verboseç¨äºåå§åä¸ä¸ªæ°ç webpack 项ç®ã
npx webpack init [generation-path] [options]example
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'
模æ¿ç±»åã
åå§åä¸ä¸ªæä»¶ã
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
string
å¨è¾åºä¿¡æ¯ä¸æ·»å é¢å¤çå ã
example
npx webpack info --additional-package postcss-o, --output
string : '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 æä¾äºä»¥ä¸ flagï¼
| Flag / å«å | ç±»å | æè¿° |
|---|---|---|
--entry | string[] | åºç¨ç¨åºçå
¥å£æä»¶ï¼ä¾å¦ ./src/main.js |
--config, -c | string[] | æä¾ webpack é
ç½®æä»¶çè·¯å¾ï¼ä¾å¦ ./webpack.config.js |
--config-name | string[] | è¦ä½¿ç¨çé ç½®å |
--name | string | é ç½®åç§°ï¼å¨å è½½å¤ä¸ªé ç½®æ¶ä½¿ç¨ |
--color | boolean | å¯ç¨æ§å¶å°é¢è² |
--merge, -m | boolean | ä½¿ç¨ webpack-merge å并两个é
ç½®æä»¶ï¼ä¾å¦ -c ./webpack.config.js -c ./webpack.test.config.js |
--env | string[] | å½å®æ¯ä¸ä¸ªå½æ°æ¶ï¼ä¼ éç»é ç½®çç¯å¢åé |
--progress | boolean, string | å¨æå»ºè¿ç¨ä¸æå°ç¼è¯è¿åº¦ |
--help | boolean | è¾åºæææ¯æç flag åå½ä»¤ |
--output-path, -o | string | webpack çææä»¶çè¾åºä½ç½®ï¼ä¾å¦ ./dist |
--target, -t | string[] | è®¾ç½®è¦æå»ºç target |
--watch, -w | boolean | ç嬿件åå |
--watch-options-stdin | boolean | stdin stream ç»ææ¶ï¼åæ¢çå¬ |
--hot, -h | boolean | å¯ç¨ HMR |
--devtool, -d | string | æ§å¶æ¯å¦çæ source mapï¼ä»¥åå¦ä½çæ |
--prefetch | string | é¢å åçè¯·æ± |
--json, -j | boolean, string | å°ç»ææå°æ JSON æ ¼å¼æåå¨å¨æä»¶ä¸ |
--mode | string | å®ä¹ webpack æéç mode |
--version, -v | boolean | è·åå½å cli çæ¬ |
--stats | boolean, string | å®åè¯ webpack å¦ä½å¤ç stats |
--analyze | boolean | å®è°ç¨ webpack-bundle-analyzer æä»¶æ¥è·å bundle ä¿¡æ¯ |
| Flag | æè¿° |
|---|---|
| --no-color | ç¦ç¨æ§å¶å°é¢è² |
| --no-hot | å¦æä½ éè¿é ç½®å¯ç¨äº HMRï¼åç¦ç¨å® |
| --no-stats | ç¦ç¨ä»»ä½ç± webpack emit åºæ¥ç stats |
| --no-watch | ç¦ç¨æä»¶åæ´ççå¬ |
| --no-devtool | ç¦æ¢çæ source maps |
ä» CLI v4 å webpack v5 å¼å§ï¼CLI å°éç¨ä» webpack ç core ä¸å¯¼å ¥æ´ä¸ªé ç½®çæ¨¡å¼ï¼å 许 CLI è°æ´å 乿æé 置项ã
龿¥ä¸æ¯ webpack v5 å CLI v4 æ¯æçæææ ¸å¿ flag å表 - 详æ³
ä¾å¦ï¼å¦æä½ æ³å¨é¡¹ç®ä¸å¯ç¨æ§è½æç¤ºï¼ä½ éå¨é ç½®ä¸ä½¿ç¨æ¤é项ï¼èå¦æä½¿ç¨æ ¸å¿ flagï¼ä½ å¯ä»¥è¿æ ·åï¼
npx webpack --performance-hints warningnpx webpack [--config webpack.config.js]é ç½®æä»¶ä¸çç¸å ³é项ï¼è¯·åé é ç½®ã
npx webpack --entry <entry> --output-path <output-path>example
npx webpack --entry ./first.js --entry ./second.js --output-path /buildæå»ºé¡¹ç®æ¶å ¥å£å¯ä»¥é ç½®ä¸ä¸ªæä»¶åæä¸ç»è¢«å½åè¿çæä»¶åãä½ å¯ä»¥ä¼ éå¤ä¸ªå ¥å£ï¼æ¯ä¸ªå ¥å£å¨å¯å¨æ¶å è½½ï¼ã å¦ä¸æ¯éè¿ CLI æå® entry çå¤ç§æ¹å¼ï¼
npx webpack ./first-entry.jsnpx webpack --entry ./first-entry.jsnpx webpack ./first-entry.js ./other-entry.jsnpx webpack --entry ./first-entry.js ./other-entry.jsç¨äºåå¨æå»ºåçæä»¶è·¯å¾ãå®å°æ å°å°é
ç½®é项 output.pathã
示ä¾
åè®¾ä½ ç项ç®ç»æåä¸é¢è¿æ ·ï¼
.
âââ dist
âââ index.html
âââ src
âââ index.js
âââ index2.js
âââ others.jsnpx webpack ./src/index.js --output-path distè¿å°å¯¹æºç è¿è¡æå
ï¼å
¶å
¥å£ä¸º index.jsï¼ä¸ bundle æä»¶çè¾åºè·¯å¾ä¸º 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 msnpx 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 msCLI ä¼å¨ä½ ç项ç®è·¯å¾ä¸å¯»æ¾é»è®¤é ç½®ï¼ä»¥ä¸æ¯ CLI ééå°çé ç½®æä»¶ã
æ¤å¤æé¡ºåºéå¢è¿è¡ä¼å 级æ¥è¯¢ï¼
ç¤ºä¾ ââ é ç½®æä»¶çæ¥æ¾é¡ºåº .webpack/webpackfile > .webpack/webpack.config.js > webpack.config.js
'webpack.config',
'.webpack/webpack.config',
'.webpack/webpackfile',
ååºå½ä»¤è¡å¯ç¨çåºç¡å½ä»¤å flag
éè¿ webpack help [command] [option] 以å webpack [command] --help åå¯è·å¾å¸®å©ä¿¡æ¯ï¼
npx webpack --help
# or
npx webpack helpååºææ cli æ¯æçå½ä»¤å flag
npx webpack --help=verboseæ¥çç¹å®å½ä»¤æé项ç帮å©ï¼
npx webpack help --modeæ¾ç¤ºå·²å®è£ ç package 以åå package ççæ¬ã
å¦éæ£æ¥ä½ æ£å¨ä½¿ç¨ç webpack å webpack-cli ççæ¬ï¼åªéè¿è¡å¦ä¸å½ä»¤ï¼
npx webpack --version
# or
npx webpack versionè¿è¡ç»æå¦ä¸ï¼
webpack 5.31.2
webpack-cli 4.6.0è¥å·²å®è£
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ï¼è¿å¯ä»¥æå®å
¶å®çé
ç½®æä»¶ã
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',
},
];å¹¶ä¸åªæ³è¿è¡ç¬¬äºä¸ªé 置项ï¼
npx webpack --config-name secondä½ ä¹å¯ä»¥ä¼ éå¤ä¸ªå¼æ¥å®ç°ï¼
npx webpack --config-name first --config-name secondä½ å¯ä»¥éè¿ --merge é项æ¥å并两个æå¤ä¸ªä¸åç webpack é
ç½®ï¼
npx webpack --config ./first.js --config ./second.js --merge以 JSON æ ¼å¼è¾åº webpack çè¿è¡ç»æ
npx webpack --jsonå¦æä½ æ³æ stats æ°æ®åå¨ä¸º JSON èéè¾åºï¼ä½ å¯ä»¥ä½¿ç¨ï¼
npx webpack --json stats.jsonå¨å ¶ä»æ åµä¸ï¼webpack 伿å°åº bundleãchunk 以å timing ç»èç stats ä¿¡æ¯ãä½¿ç¨æ¤é项ï¼ä¼è¾åº JSON 对象ãè¿ä¸ªè¾åºç»æå¯ä»¥è¢« webpack ç analyse å·¥å ·ï¼æè chrisbateman ç webpack-visualizerï¼åæè th0r ç webpack-bundle-analyzer æè¯å«ãanalyse å·¥å ·ä¼æ¥æ¶ JSONï¼å¹¶ä»¥å¾å½¢çå½¢å¼å±ç¤ºæææå»ºçç»èã
å½ webpack é 置导åºä¸ºå½æ°æ¶ï¼ä¼æ¥æ¶å°ä¸ä¸ª "environment" çåæ°ã
npx webpack --env production # env.production = true--env åæ°å¯ä»¥æ¥æ¶å¤ä¸ªå¼ï¼
| Invocation | Resulting environment |
|---|---|
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 åéï¼å¨ä½ ç webpack é
ç½®ä¸ä¹ä½¿ç¨äºä¸äº env å
ç½®åéï¼
| åéå | æè¿° |
|---|---|
WEBPACK_SERVE | å¦æä½¿ç¨äº serve|server|sï¼å为 trueã |
WEBPACK_BUILD | å¦æä½¿ç¨äº build|bundle|bï¼å为 trueã |
WEBPACK_WATCH | å¦æä½¿ç¨äº --watch|watch|wï¼å为 trueã |
请注æä½ ä¸è½å¨ bundle 代ç ä¸ä½¿ç¨è¿äºå ç½®ç¯å¢åéã
module.exports = (env, argv) => {
return {
mode: env.WEBPACK_SERVE ? 'development' : 'production',
};
};ä½ å¯ä»¥ä½¿ç¨ --node-env é项æ¥è®¾ç½® process.env.NODE_ENV:
npx webpack --node-env production # process.env.NODE_ENV = 'production'| åæ° | 说æ | è¾å ¥ç±»å | é»è®¤å¼ |
|---|---|---|---|
--config | é ç½®æä»¶çè·¯å¾ | string[] | é»è®¤é ç½® |
--config-name | è¦ä½¿ç¨çé ç½®å | string[] | |
--env | å½é ç½®æä»¶ä¸ºå½æ°æ¶ï¼environment å°ä½ä¸ºåæ°ä¼ éç»é ç½® | string[] |
ä½ å¯ä»¥ä½¿ç¨ webpack-bundle-analyzer æä»¶æ¥åæä½ webpack è¾åºç bundleãä½ è¿å¯ä»¥éè¿ CLI ç --analyze flag è°ç¨å®
npx webpack --analyzeå¦éæ¥ç webpack çç¼è¯è¿åº¦ï¼ä½ å¯ä»¥ä½¿ç¨ --progress flagã
npx webpack --progresså¦éæ¶éç¼è¯è¿ç¨ä¸æ¯ä¸æ¥ç profile æ°æ®ï¼ä½ å¯ä»¥å° profile ä½ä¸ºå¼ä¼ éç» --progress flagã
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 Error |
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 webpackYou might encounter this error in the case of using native ESM in TypeScript (i.e. type: "module" in package.json).
webpack-cli supports configuration in both CommonJS and ESM format, at first it tries to load a configuration using require(), once it fails with an error code of 'ERR_REQUIRE_ESM' (a special code for this case) it would try to load the configuration using import().
However, the import() method won't work with ts-node without loader hooks enabled (described at TypeStrong/ts-node#1007).
To fix the error above use the following command:
NODE_OPTIONS="--loader ts-node/esm" npx webpack --entry ./src/index.js --mode productionFor more information, see our documentation on writing a webpack configuration in TypeScript.