BABEL_ENV 在 React App 中 运行 npm test 时出现问题
BABEL_ENV issue when running npm test in React App
我的 package.json 的脚本块中有以下脚本,这需要通过 babel-register- 的 babel 并将 NODE_ENV 设置为 development 以便这样做。
"test": "set NODE_ENV=development&&mocha --watch --require babel-register --require jsdom-global/register --require ignore-styles --require src/tests/helpers.js src/tests/**/*.js"
但是我收到了这个错误:
Error: Using `babel-preset-react-app` requires that you specify `NODE_ENV` or `BABEL_ENV` environment variables. Valid values are "development", "test", and "production". Instead, received:undefined.
我已经尝试了卸载、重新安装、更改我的脚本中要求的顺序以及 the main git issue for this error 中提到的其他几个步骤的多种组合。
有人能看出我的方法有明显错误吗?完整包如下:
"dependencies": {
"prop-types": "^15.6.2",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-scripts": "1.1.4",
"tslib": "^1.9.3",
"typescript": "^3.0.1"
},
"scripts": {
"build-css": "node-sass-chokidar src/ -o src/",
"watch-css": "node-sass-chokidar src/ -o src/ --watch --recursive",
"start-js": "react-scripts start",
"build-ts": "set NODE_ENV=development tsc || exit 0",
"watch-ts": "tsc --watch",
"build": "react-scripts build",
"start": "npm-run-all -p build-* watch-* start-js",
"test": "set NODE_ENV=development&&mocha --watch --require babel-register --require jsdom-global/register --require ignore-styles --require src/tests/helpers.js src/tests/**/*.js",
"eject": "react-scripts eject"
},
"babel": {
"presets": [
"es2015",
"react",
"react-app"
],
"plugins": [
"transform-object-rest-spread"
]
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"chai": "^4.1.2",
"enzyme": "^3.4.1",
"enzyme-adapter-react-16": "^1.2.0",
"ignore-styles": "^5.0.1",
"jsdom": "^11.12.0",
"jsdom-global": "^3.0.2",
"mocha": "^5.2.0",
"node-sass-chokidar": "^1.3.3",
"npm-run-all": "^4.1.3",
"sinon": "^6.1.5"
}
您当前正在使用 set
来指定您的 NODE_ENV
变量,这导致它对子进程不可用,即在 &&
运算符之后链接的下一个命令,这是 mocha
.
如果您改用 export
,您将确保它对子进程可用。
将 test
脚本的开头更改为以下内容:
"test": "export NODE_ENV=development && mocha --watch ..."
跨平台:
export
仅适用于 Bash 环境。对于跨平台解决方案,请考虑使用 cross-env 来设置环境变量。示例:
"test": "cross-env NODE_ENV=development mocha --watch ..."
注意:export
已替换为 cross-env
,并且不需要 &&
运算符。
我的 package.json 的脚本块中有以下脚本,这需要通过 babel-register- 的 babel 并将 NODE_ENV 设置为 development 以便这样做。
"test": "set NODE_ENV=development&&mocha --watch --require babel-register --require jsdom-global/register --require ignore-styles --require src/tests/helpers.js src/tests/**/*.js"
但是我收到了这个错误:
Error: Using `babel-preset-react-app` requires that you specify `NODE_ENV` or `BABEL_ENV` environment variables. Valid values are "development", "test", and "production". Instead, received:undefined.
我已经尝试了卸载、重新安装、更改我的脚本中要求的顺序以及 the main git issue for this error 中提到的其他几个步骤的多种组合。
有人能看出我的方法有明显错误吗?完整包如下:
"dependencies": {
"prop-types": "^15.6.2",
"react": "^16.4.1",
"react-dom": "^16.4.1",
"react-scripts": "1.1.4",
"tslib": "^1.9.3",
"typescript": "^3.0.1"
},
"scripts": {
"build-css": "node-sass-chokidar src/ -o src/",
"watch-css": "node-sass-chokidar src/ -o src/ --watch --recursive",
"start-js": "react-scripts start",
"build-ts": "set NODE_ENV=development tsc || exit 0",
"watch-ts": "tsc --watch",
"build": "react-scripts build",
"start": "npm-run-all -p build-* watch-* start-js",
"test": "set NODE_ENV=development&&mocha --watch --require babel-register --require jsdom-global/register --require ignore-styles --require src/tests/helpers.js src/tests/**/*.js",
"eject": "react-scripts eject"
},
"babel": {
"presets": [
"es2015",
"react",
"react-app"
],
"plugins": [
"transform-object-rest-spread"
]
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"chai": "^4.1.2",
"enzyme": "^3.4.1",
"enzyme-adapter-react-16": "^1.2.0",
"ignore-styles": "^5.0.1",
"jsdom": "^11.12.0",
"jsdom-global": "^3.0.2",
"mocha": "^5.2.0",
"node-sass-chokidar": "^1.3.3",
"npm-run-all": "^4.1.3",
"sinon": "^6.1.5"
}
您当前正在使用 set
来指定您的 NODE_ENV
变量,这导致它对子进程不可用,即在 &&
运算符之后链接的下一个命令,这是 mocha
.
如果您改用 export
,您将确保它对子进程可用。
将 test
脚本的开头更改为以下内容:
"test": "export NODE_ENV=development && mocha --watch ..."
跨平台:
export
仅适用于 Bash 环境。对于跨平台解决方案,请考虑使用 cross-env 来设置环境变量。示例:
"test": "cross-env NODE_ENV=development mocha --watch ..."
注意:export
已替换为 cross-env
,并且不需要 &&
运算符。