【发布时间】:2019-01-14 17:17:40
【问题描述】:
我是新手,希望这个问题的格式和表述正确。迫不及待地想看看你对这个问题的回答。让我们开始吧..
上下文
上周末我试图在我的create-react-app 配置文件中实现es2015 语法支持,这很简单。我所要做的就是使用babel-register 和babel-preset-env 让它工作。到目前为止,你可以说这么好,但并不全是好的。经过几个小时的搜索,我发现process.env 变量没有传递给导入的模块。下面的代码将演示我的问题。
代码
package.json
{
...
"scripts": [
"good": "NODE_ENV=development BABEL_ENV=development node -r babel-register scripts/start.js",
"bad": "node -r babel-register scripts/start.js"
],
"devDependencies": {
"babel-core": "^6.26.3",
"babel-preset-env": "^1.7.0",
"babel-register": "^6.26.0"
}
...
}
.babelrc
{
"presets": [ "env" ]
}
scripts/start.js
'use strict'
process.env.NODE_ENV = 'development';
process.env.BABEL_ENV = 'development';
// Always works
const a = require('../src/a');
// Only when environment variables are passed in via the CLI
import b from '../src/b';
console.log('Bye bye..');
src/a.js
'use strict'
console.log('Module A:', process.env.NODE_ENV);
const a = { name: "Module A" };
export default a;
src/b.js
'use strict'
console.log('Module B:', process.env.NODE_ENV);
const b = { name: "Module B" };
export default b;
运行代码
您将在下面看到两个npm 脚本的输出:
npm run good
# Outputs:
Module B: development
Module A: development
Bye bye..
npm run bad
# Outputs:
Module B: undefined
Module A: development
Bye bye..
我的问题
- 为什么不以编程方式设置环境变量传递给导入的模块?
- 可以在保持 es2015 语法的同时解决这个问题吗? (例如,使用 babel 插件?)
更多信息
只是将我的process.env.NODE_PATH 移至 CLI 是行不通的,create-react-app 以编程方式在其配置/脚本文件的多个位置设置环境变量。我在下面列出了一些链接,指向create-react-app repo 和一些给我带来麻烦的文件。
-
create-react-app
create-react-app存储库的链接。 -
scripts/start.js 这个脚本同时设置了
process.env.NODE_ENV和process.env.BABEL_ENV。 -
config/env.js 这个配置文件设置
process.env.NODE_PATH。
注意事项
根据我目前的理解,create-react-app 与我遇到的问题几乎没有关系。我对为什么以编程方式设置的环境变量不传递给导入的模块很感兴趣。
我的设置
- 操作系统:Ubuntu 16.04
- 节点:v8.11.2
- Npm:6.3
【问题讨论】:
标签: javascript node.js import ecmascript-6 environment-variables