[英]NPM: How can I hook SET NODE_ENV in package.json's prestart script?
我有一個使用 npm init -y 創建的基本應用程序。 在 package.json 我有一個指向 server.js 的主條目。
{
"name": "rest-api",
"version": "1.0.0",
"description": "",
"main": "server.js",
"private": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"prestart": "SET NODE_ENV=dev"
}
我試圖在 prestart 中設置 NODE_ENV 變量並讓 npm 調用 main 來調用 npm start。 但是在 prestart 中設置的環境變量沒有被結轉並且是未定義的。 當我運行“npm start”時,控制台輸出這兩個命令都按順序執行。
PS D:\test\RestAPI> npm start
> rest-api@1.0.0 prestart D:\test\RestAPI
> set NODE_ENV=dev
> rest-api@1.0.0 start D:\test\RestAPI
> node server.js
undefined
[undefined] Listening on http://localhost:3000
但是當我從應用程序打印變量時,它是未定義的。 我在這里做錯了什么,或者這是應該的行為方式嗎? 有沒有辦法使用“SET NODE_ENV=dev”調用和設置環境變量而不將它鏈接到“node server.js”
當我在“開始”中組合兩者時,如下所示,則設置了環境變量。
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "set NODE_ENV=dev && node server.js"
}
我正在 Windows 10,npm 版本 3.10.10 上測試這個。 感謝你的幫助。
我知道如何使用“開始”在 package.json 中完成此操作。 這個問題是關於如何通過“預啟動”來實現的。
謝謝。
簡短的回答是不可能的。
1. 為什么:這是不可能的,因為每個腳本都由 npm 為此目的產生的不同進程執行,這些進程有自己的環境變量。
要實現這一點,請創建測試項目並將兩個腳本配置為
"start": "pause&&set VAR1",
"prestart" : "pause&&set VAR1=value&&set VAR1&&pause",
在 Windows 上打開任務管理器並密切注意在運行腳本之前列出了多少個 cmd 進程。
運行命令“npm start”並在每次請求時“按任意鍵繼續...”只需注意創建的進程是如何創建的。 我按順序附上了截圖
2. 除非:您更改 npm 執行不同腳本的方式,以對所有我認為很復雜並且可能會產生錯誤的腳本使用一個 cmd。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.