我正在尝试利用process.env.NODE_ENV在我的反应原生应用的环境之间切换,我在这里面临两个问题
1。将参数分配给NODE_ENV似乎不会直接改变env值,
执行以下命令显示它更改了process.env.NODE_ENV值,但似乎没有更改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
请找到附图片 - AssignToReadOnlyPropertyIssue
答案 0 :(得分:2)
你面临的问题来自错误的假设:
react-native
不会以与节点相同的方式执行javascript。
让我们考虑以下npm脚本:
"scripts": {
"start": "node index.js"
}
运行SOME_VAR="some value" npm start
时,process.env
将包含该环境变量的条目,因为它是从定义了SOME_VAR
的进程运行的。
在react-native
中发生了不同的事情:
调用npm start
启动react-native packager,它将您的javascript代码捆绑在一起,然后将该javascript包发送到您的模拟器或设备中的安装,然后执行该捆绑包。 react-native
的打包者没有"转发"定义了javascript捆绑的环境变量。
希望有一些软件包可以帮助我们继续使用我们在开发节点应用程序时习惯使用的相同模式。
我觉得非常有帮助的是babel-plugin-transform-inline-environment-variables
。这是一个babel插件,可以在捆绑时将process.env.SOME_VAR
类型调用转换为SOME_VAR
的值。
我唯一头疼的是,当我第一次尝试看它是如何工作的时候,我正在改变环境变量,但它似乎只是随机地工作了#34;。事实证明我是webpack
缓存的受害者。如果代码没有变化,则表示它不会更新捆绑包。然后我了解到我必须意识到这一点