2017-07-23 35 views
1

說,我正在製作一個npm包。如何從全局包運行npm腳本?

樣品的package.json:

{ 
    "bin": { "cli": "cli.js" }, 
    "scripts": { 
    "sample": "node sample.js" 
    } 
} 

樣品cli.js:

const shell = require('shelljs') 
shell.exec('npm run sample') 

然後,我跑npm link

現在,如果我跑從任何地方cli比其他項目存儲庫,它不運行。相反,它會引發錯誤。

const shell = require('shelljs') 
, package_path = require('./path.json') 
// I manually created this path.json containing the absolute path of the package 

shell.exec('npm run --prefix ${package_path} sample') 

這類作品:

我改變cli.js爲找到一個解決辦法。但主要限制是:

  • 項目的所有貢獻者必須在克隆回購之後手動設置此路徑。

  • 如果軟件包像npm i -g package那樣全局安裝,那麼這個路徑變化對用戶來說是煩人的。

什麼我問的是:

  • 我如何可以自動設置路徑?

  • 來達到同樣的行爲的任何其他更好方法,那就是, 調用從全球cli腳本npm script

回答

1

我發現優雅解決我的問題。

編輯cli.js文件:

const shell = require('shelljs') 
shell.exec(`npm run --prefix ${__dirname} sample`) 

節點提供了一些門面全局(read here),這是真的很有幫助。

在這裏,__dirname是完美的解決方案。它提供執行腳本的路徑。

希望這可以幫助任何其他開發人員。