它看起来不像你可以直接通过npm脚本来做到这一点。我的猜测是npm cd
在运行命令之前到项目目录(这也可以通过您可以执行cd ./bin
或node bin/index.js
来证明)。纱线甚至不会让你运行一个命令,除非你在与package.json
相同的目录中。
"scripts": {
"exec": "npm i --silent && node bin/index.js $PWD"
}
index.js
console.log({
__filename,
__dirname,
cwd: process.cwd(),
execPath: process.execPath,
pwd: process.env.PWD,
argv: process.argv
});
壳的env
Jasons-MBP-2:some-dir jason$ env
PWD=/Users/jason/Development/so/npm-run/some-dir
运行
Jasons-MBP-2:some-dir jason$ npm run exec
> [email protected] exec /Users/jason/Development/so/npm-run
> npm i --silent && node bin/index.js $PWD
结果
{ __filename: '/Users/jason/Development/so/npm-run/bin/index.js',
__dirname: '/Users/jason/Development/so/npm-run/bin',
cwd: '/Users/jason/Development/so/npm-run',
execPath: '/Users/jason/.nvm/versions/node/v6.10.0/bin/node',
pwd: '/Users/jason/Development/so/npm-run',
argv:
[ '/Users/jason/.nvm/versions/node/v6.10.0/bin/node',
'/Users/jason/Development/so/npm-run/bin/index.js',
'/Users/jason/Development/so/npm-run' ] }
那么'package.json'中的'$ PWD'是未定义的。也许语法错了? – user99999
$ PWD作为argv中的第三个值,'/ Users/jason/Development/so/npm-run'(在我的macOS中至少是..) – lecstor