npm:如何在Windows(10)中设置NODE_ENV?

时间:2017-04-24 11:30:39

标签: npm

我正在尝试在package.json中添加一个npm脚本,在执行其他操作之前设置NODE_ENV(比如运行webpack)。但是虽然语法似乎是正确的,但在Windows 10下运行时未设置NODE_ENV

测试脚本

"scripts": {
   "test": "SET NODE_ENV=debug && echo %NODE_ENV%" }

npm run test的结果是"制作" (在运行脚本之前,已将NODE_ENV设置为" production")。应该是" debug"。

可能有什么不对?我甚至试过cross-env但没有成功。

修改

澄清我的问题:我无法在Windows 10下设置任何环境变量。我需要调用SET,因为我在Windows(10)下运行脚本。似乎是一些权利问题(脚本不允许设置环境变量?)。

另一个(或实际的)问题是:我如何创建一个脚本来构建(使用webpack)创建JavaScript文件的缩小版本(用于生产),以及一个脚本来创建非缩小版本(用于开发) 。到目前为止,我使用以下方法(请参阅重要部分的注释):

修改2

我现在没有这可能会产生影响,但如果确实如此:我使用了使用create-react-app创建的React应用程序。我找到了问题的答案,见下文。

的package.json:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {

    // Scipts for build for development and for production
    "build-dev": "SET NODE_ENV=debug webpack",
    "build-release": "SET NODE_ENV=production webpack"

  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "babel-core": "^6.24.1",
    "babel-loader": "^7.0.0",
    "babel-preset-env": "^1.4.0",
    "babel-preset-react": "^6.24.1",
    "debug": "^2.6.4",
    "webpack": "^2.4.1"
  }
}

webpack.config.js:

const path = require('path');
var webpack = require('webpack');

// Check if in debug environment
var debug = process.env.NODE_ENV !== "production";

module.exports = {
  context: path.join(__dirname, 'src'),
  entry: ['./index.js'],
  output: {
    path: path.join(__dirname, 'www/js'),
    filename: 'index.js',
  },
  devtool: 'source-map',
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: ['babel-loader'],
      }],
  },

  // Add the UglifyJs plugin only in debug mode
  plugins: debug ? []  : [new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false })],

  resolve: {
    modules: [
      path.join(__dirname, 'node_modules')
    ]
  }
};

此操作失败,因为设置NODE_ENV由于某种原因不起作用。直接使用命令提示符,如脚本:

SET NODE_ENV = debug
webpack

顺便说一句。这证明配置没问题,但只有npm脚本无法设置NODE_ENV。

3 个答案:

答案 0 :(得分:4)

如果您仍然在Windows 10中设置NODE_ENV时遇到问题 - 这将对您有所帮助。在package.json文件中添加以下内容:

"test": "SET \"NODE_ENV=test\""

如果您计划将其推送到Heroku - 您将必须“导出”该变量,并且您的字符串将如下所示(您正在使用斜杠转义Windows-NEEDED引号):

"test": "export NODE_ENV=test || SET \"NODE_ENV=test\""

最后,如果您需要像mocha这样的跟随命令,那么该行将如下所示:

"test": "export NODE_ENV=test || SET \"NODE_ENV=test\" && mocha server/**/*.name_of_files_plus_test.js"

希望这有助于某人:) - 迈克

答案 1 :(得分:1)

我在此期间找到了问题的答案,基本上是create-react-app readme:首先在使用create-react-app NODE_ENV创建的应用中,无法手动覆盖。其次,在设置环境变量时,它们的名称必须以“REACT_APP_”开头。这是我的解决方案。

在package.json中:

"scripts": {
    ...
    "build:staging": "SET REACT_APP_ENVIRONMENT=Staging && npm run build"
}

在代码中:

if (process.env.REACT_APP_ENVIRONMENT === "Staging") ...

答案 2 :(得分:-2)

你试过吗?

set DEBUG=* & npm run test

确保debug已安装

npm install debug --save

<强>更新 要在Windows中设置环境变量,请使用

set NODE_ENV=dev //for development environment

在你的情况下

"scripts": {
   "test": "NODE_ENV=dev && echo %NODE_ENV%" }