我正在尝试利用process.env.node_env在我的React Native应用程序的环境之间切换,并且在此处面对两个问题
1。将参数分配给node_env似乎并没有直接更改env值,
执行以下命令显示它更改了process.env.node_env value,但似乎没有更改global.process.env.node_env
执行命令:
NODE_ENV=development npm start -- --reset-cache
输出:请注意,第二个日志语句仍在打印开发。
console.log("printing the changed value - ", process.env.NODE_ENV); // --> printing the changed value - production
console.log("checking the env content - ", process.env); // ---> checking the env content - { NODE_ENV: 'development' }
我尝试的解决方法是将process.env.node_env分配给全局实例,
global.process.env.NODE_ENV = process.env.NODE_ENV
请建议这是一个很好的方法。
2。将"生产"分配给Node_env投掷的值,试图分配以读取属性错误,
执行命令:
NODE_ENV=production npm start -- --reset-cache
请找到附带的图像 - todsttoreadonlypropertyissue
您在这里面临的问题来自错误的假设:
react-native
不会以与节点相同的方式执行JavaScript。
让我们考虑以下NPM脚本:
"scripts": {
"start": "node index.js"
}
运行SOME_VAR="some value" npm start
时,process.env
将包含该环境变量的条目,因为它是从定义SOME_VAR
的过程中运行的。
在react-native
中发生了不同的事情:呼叫npm start
启动了反应的包装器,该包装器将您的JavaScript代码捆绑在一起,然后将JavaScript捆绑包发送到模拟器或设备中的安装,该捆绑包在该捆绑包中执行。react-native
的packager并未"向前"定义JavaScript捆绑的环境变量。
希望有些软件包有助于我们能够继续使用开发节点应用程序时使用的相同模式。
我发现一个非常有用的是babel-plugin-transform-inline-environment-variables
。这是一个通用的babel插件,将process.env.SOME_VAR
类型的调用转换为捆绑时间期间SOME_VAR
的值。
我唯一遇到的头痛是,当我第一次试图查看它如何工作时,我正在改变环境变量,但它似乎只能"随机"起作用。原来我是webpack
的缓存的受害者。如果代码没有更改,则不会更新捆绑包。然后,我了解到我必须意识到