我正在尝试在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。
答案 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%" }