Xle*_*lee 6 pwd yo npm-scripts
我不仅可以从项目根目录还可以从子文件夹运行 NPM 脚本,这很好。但是,受限于它不能告诉我当前的工作路径 ($PWD)。
假设有一个这样的命令:
"scripts": {
...
"pwd": "echo $PWD"
}
Run Code Online (Sandbox Code Playgroud)
如果我npm run pwd在项目根目录的子文件夹中运行(例如,$PROJECT_ROOT/src/nested/dir),它不会打印出我当前的路径$PROJECT_ROOT/src/nested/dir,而是总是$PROJECT_ROOT返回。有没有办法告诉 NPM 脚本使用我当前的工作目录而不是解析到package.json所在的位置?
基本上,我想将 Yeoman 生成器拉入现有项目并通过 NPM 脚本使用它,以便每个人都可以使用共享知识(例如npm run generator),而不是学习任何特定于 Yeoman 的东西(例如npm i yo -g; yo generator)。由于生成器根据当前工作路径生成文件,而 NPM 脚本始终解析为项目根目录,因此我无法在打算使用的地方使用生成器。
Mar*_*tör 20
如果您希望脚本根据您所在的子目录使用不同的行为,您可以使用
INIT_CWD环境变量,它保存您运行npm run.
来源:https : //docs.npmjs.com/cli/run-script
像这样使用它:
"scripts": {
"start": "live-server $INIT_CWD/somedir --port=8080 --no-browser"
}
Run Code Online (Sandbox Code Playgroud)
更新 2019-11-19
$INIT_CWD仅适用于 *nix-like 平台。Windows 将需要%INIT_CWD%. 有点令人失望的是,Node.js 没有为我们抽象出来。解决方法:使用cross-env-shell live-server $INIT_CWD/somedir....-> https://www.npmjs.com/package/cross-env
一种已知的解决方案是通过 ENV 变量注入。
例如:
在package.json中定义脚本:
"pwd": "cd $VAR && echo $PWD"
从任何子目录调用它:
VAR=$(pwd) npm run pwd
然而,这看起来真的很难看,有没有更干净/更好的解决方案?
| 归档时间: |
|
| 查看次数: |
5683 次 |
| 最近记录: |