我試圖構建一個package.json,以便在Heroku上運行NodeJS應用程序時,它將使用環境變量運行scripts.postinstall步驟。例如:是否有可能在npm/package.json中使用環境變量?
...
"scripts": {
"postinstall": "command $ENV_VAR"}
},
...
我已經看過了docs,沒能找到的東西說我可以。
這甚至可能嗎?這甚至是可取的和「我做錯了嗎?」?
我試圖構建一個package.json,以便在Heroku上運行NodeJS應用程序時,它將使用環境變量運行scripts.postinstall步驟。例如:是否有可能在npm/package.json中使用環境變量?
...
"scripts": {
"postinstall": "command $ENV_VAR"}
},
...
我已經看過了docs,沒能找到的東西說我可以。
這甚至可能嗎?這甚至是可取的和「我做錯了嗎?」?
回答最後一個問題,因爲它們是最重要的問題:是的,不是,絕對是因爲您剛剛破壞了跨平臺兼容性。不能保證你的環境語法適用於所有操作系統上的所有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,這是完全跨平臺的,並使開發人員的生活更容易。
忽略可笑的人。你可以用跨平臺的方式使用cross-var
:
"scripts": {
"postinstall": "cross-var command $ENV_VAR"
}