簡體   English   中英

將 NODE_ENV 傳遞到 Windows 10 的 npm 腳本中

[英]Passing NODE_ENV into the npm script for Windows 10

我在 Typescript 項目中使用webpack 我正在學習創建 3 個webpack文件的教程

  1. webpack.common.js
  2. webpack.production.js
  3. webpack.development.js

在教程的package.json"scripts"秒具有以下內容:

"build": "webpack --config webpack.$NODE_ENV.js"

我一直在研究以下 SE 查詢來為 Windows 10 設置NODE_ENV

我在 PowerShell 中執行的位置:

$env:NODE_ENV="development"

但是,一旦我執行npm run build腳本仍然將$NODE_ENV作為字符串並且不會替換這些值。

如果這對我不起作用,我可能會稍后轉向cross-env環境,但我想在 PowerShell 中嘗試環境變量。

什么應該是等效的命令:

NODE_ENV=development npm run build
NODE_ENV=production npm run build

在 Windows 中,我應該如何更改package.jsonscripts $NODE_ENV接受變量?

使用cross-env

通過執行以下操作,可以使用cross-env實現類似的功能:

  1. npm i --save-dev cross-env
  2. "scripts"添加:

     "build-dev": "cross-env NODE_ENV=development webpack --config webpack.%NODE_ENV%.js" "build-prod": "cross-env NODE_ENV=production webpack --config webpack.%NODE_ENV%.js"

    這應該會觸發相應的腳本。

然而,這仍然沒有為用戶提供在設置 env 時運行通用 npm 腳本命令的靈活性。 在飛行中

PowerShell 限制

在某些示例中,查詢建議執行以下操作:

  set NODE_ENV=production&& npm run build

但這在 PowerShell 中失敗並出現以下錯誤:

At line:1 char:24
+ set NODE_ENV=production&& npm run build-dev
+                        ~~
The token '&&' is not a valid statement separator in this version.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine

並且&保留供將來使用。

像下面這樣更改你的package.json:

請注意,您必須更改所有webpack.common.js,webpack.production.js,webpack.development.js

 webpack.common.js:

"build": "set NODE_ENV=development && webpack --config webpack.common.js"


 webpack.production.js:

"build": "set NODE_ENV=production && webpack --config webpack.production.js"


 webpack.development.js:

"build": "set NODE_ENV=development && webpack --config webpack.development.js"

也許這樣的事情可以幫到你

SET NODE_ENV=production& webpack -p --mode=production

如果它不起作用,你可以在你的webpack中設置它

webpack.dev.js

plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                'NODE_ENV': JSON.stringify('development')
            }
        })
    ],

webpack.prod.js

  plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                'NODE_ENV': JSON.stringify('production')
            }
        })
    ]

我能夠根據@ambienBeing的評論來解決這個問題。 不過這里有一些注意事項:

  • && 不會在工作PowerShell ,但在Works cmd
  • 而不是$NODE_ENV我需要在"scripts"部分中調整%NODE_ENV%

     "build": "echo %NODE_ENV% && webpack --config webpack.%NODE_ENV%.js" 

執行以下操作時:

 set NODE_ENV=production&&npm run build

腳本正確執行。

為了確定,我在相應的webpack.x.js文件中添加了console.log("production")以及console.log("development")

我可以在控制台中看到相應的字符串兩次打印:來自echo 1 x和來自文件的1 x

測試

  • 當將默認shell更改為cmd而不是PowerShell時,這與VS Code完美配合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM