2017-03-18 59 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