它看起來不像你可以直接通過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