2015-10-06 122 views
3

我試圖構建一個package.json,以便在Heroku上運行NodeJS應用程序時,它將使用環境變量運行scripts.postinstall步驟。例如:是否有可能在npm/package.json中使用環境變量?

... 
"scripts": { 
    "postinstall": "command $ENV_VAR"} 
}, 
... 

我已經看過了docs,沒能找到的東西說我可以。

這甚至可能嗎?這甚至是可取的和「我做錯了嗎?」?

回答

7

回答最後一個問題,因爲它們是最重要的問題:是的,不是,絕對是因爲您剛剛破壞了跨平臺兼容性。不能保證你的環境語法適用於所有操作系統上的所有shell,所以不要這樣做。

我們已經向我們提供了有保證的跨平臺技術:節點。因此,創建一個名爲bootstrap.js的文件,然後將npm運行node bootstrap作爲您的安裝後腳本。由於bootstrap.js中的代碼將像其他任何節點腳本一樣運行,因此它將以完全跨平臺兼容的方式訪問process.env,並且每個人都會很開心。

還有許多,使用通用utils的有節點等價,這樣你就可以npm安裝它們,本地而不是全局的,然後再打電話給他們在NPM劇本很多,很多事情。例如mkdir -p不是跨平臺的,但安裝mkdirp模塊,然後當爲npm run ensuredirs

爲方便起見,運行像"ensuredirs": "mkdirp dist/assets"的NPM腳本正常工作到處,最常見的UNIX工具都有自己的亞軍包,shx,這是完全跨平臺的,並使開發人員的生活更容易。

3

忽略可笑的人。你可以用跨平臺的方式使用cross-var

"scripts": { 
    "postinstall": "cross-var command $ENV_VAR" 
} 
相關問題