2017-03-18 57 views
0

我有一个节点脚本坐在project/bin/index.js,我加入其执行命令package.json路径NPM运行调用的位置

scripts: { 
    "exec": "cd ./bin && npm -i --silent && node index.js" 
} 

我现在能够从任何位置运行我的节点脚本中我项目。事情是,我想根据运行脚本的位置来做一些事情,所以我希望能够从那里获得我从哪里运行我的npm run exec的路径。可能吗?我怎样才能做到这一点?

__filename__dirnameprocess.cwd()返回脚本路径 - project/bin

回答

0

它看起来不像你可以直接通过npm脚本来做到这一点。我的猜测是npm cd在运行命令之前到项目目录(这也可以通过您可以执行cd ./binnode 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' ] } 
+0

那么'package.json'中的'$ PWD'是未定义的。也许语法错了? – user99999

+0

$ PWD作为argv中的第三个值,'/ Users/jason/Development/so/npm-run'(在我的macOS中至少是..) – lecstor