yarn + webpack 搜索路径

yarn + webpack search path

我正在查看一个项目,该项目的 package.json 文件包含以下行:

"scripts": {
    "clean": "rm -rf lib && rm -rf umd",
    "prebuild": "yarn clean",
    "build": "../../node_modules/typescript/bin/tsc",
    "build-production": "yarn build && TS_NODE_PROJECT=\"tsconfig.webpack.json\" webpack",
    "watch": "../../node_modules/typescript/bin/tsc -w",
    "test": "",
    "lint": "../../node_modules/.bin/tslint -c ../../tslint.json -p ./tsconfig.json"
  },
  "devDependencies": {
    "webpack": "^4.25.1",
    "webpack-cli": "^3.1.2"
  },

webpack 不在我的路径中,所以 运行webpack

$ webpack
-bash: /usr/bin/webpack: No such file or directory

然而不知何故,当我 运行 "yarn build-production" .. 事情似乎按预期工作。在 face 中,您可以在输出中看到 "Version: webpack 4.25.1"。

yarn build-production
yarn run v1.13.0
$ yarn build && TS_NODE_PROJECT="tsconfig.webpack.json" webpack
$ yarn clean
$ rm -rf lib && rm -rf umd
$ ../../node_modules/typescript/bin/tsc
Hash: 365eaed22ba7f6d609fc
Version: webpack 4.25.1
Time: 1289ms
Built at: 01/24/2019 5:03:35 PM
                              Asset       Size  Chunks             Chunk Names
                  ../lib/index.d.ts  268 bytes          [emitted]
eos-transit-scatter-provider.min.js    4.3 KiB       0  [emitted]  main
Entrypoint main = eos-transit-scatter-provider.min.js
[0] ./src/index.ts 6.6 KiB {0} [built]
[1] external "ScatterJS" 42 bytes {0} [built]
[2] external "ScatterEOS" 42 bytes {0} [built]
Done in 8.04s.

让我感到困惑的是,我不明白 npm 脚本是如何找到 webpack 二进制文件并使用它的。显然,如果我 运行 在 shell 中使用相同的命令,它将失败,因为 webpack 未安装在我的搜索路径中。

$ yarn build && TS_NODE_PROJECT="tsconfig.webpack.json" webpack
yarn run v1.13.0
$ yarn clean
$ rm -rf lib && rm -rf umd
$ ../../node_modules/typescript/bin/tsc
Done in 2.93s.
-bash: /usr/bin/webpack: No such file or directory

npm 脚本如何找到 webpack 二进制文件?

webpack 二进制文件安装在 ./node_modules/.bin/ 相对于那个 package.json。 npm scripts 运行 在他们的 PATH 上有那个目录,见:https://docs.npmjs.com/misc/scripts#path