【问题标题】:react-native unable to assign Production for NODE_ENV variablereact-native 无法为 NODE_ENV 变量分配生产
【发布时间】:2018-05-17 09:40:06
【问题描述】:

我正在尝试利用 process.env.NODE_ENV 在我的 react native 应用程序的环境之间切换,这里面临两个问题

1.将参数分配给 NODE_ENV 似乎不会直接改变 env 值,

执行下面的命令表明它改变了 process.env.NODE_ENV 值,但似乎没有改变 global.process.env.NODE_ENV

执行命令:

NODE_ENV=development npm start -- --reset-cache

输出:请注意,第二条日志语句仍然打印出 development。

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。将“Production”作为值分配给 NODE_ENV 会抛出 Attempted to Assign to read only property 错误,

执行命令:

NODE_ENV=production npm start -- --reset-cache

请在附件中找到图片 - AssignToReadOnlyPropertyIssue

【问题讨论】:

    标签: node.js react-native environment-variables


    【解决方案1】:

    您在这里面临的问题来自一个错误的假设:

    react-native 执行 javascript 的方式与 node 不同。

    让我们考虑以下 npm 脚本:

    "scripts": {
        "start": "node index.js"
    }
    

    运行SOME_VAR="some value" npm start 时,process.env 将包含该环境变量的条目,因为它是从定义SOME_VAR 的进程运行的。

    react-native 中发生了一些不同的事情: 调用 npm start 会启动 react-native 打包程序,该打包程序会捆绑您的 javascript 代码,然后将该 javascript 包发送到您的模拟器或设备中的安装程序,然后执行该包。 react-native 的打包程序不会“转发”绑定 javascript 的环境变量。


    希望有一些软件包可以帮助我们继续使用我们在开发节点应用程序时使用的相同模式。

    我发现真正有用的是babel-plugin-transform-inline-environment-variables。这是一个 babel 插件,它在捆绑期间将 process.env.SOME_VAR 类型调用转换为 SOME_VAR 的值。

    唯一让我头疼的是,当我第一次尝试查看它的工作原理时,我正在更改环境变量,但它似乎只是“随机”工作。原来我是webpack 缓存的受害者。如果它正在监视的代码没有更改,则不会更新捆绑包。然后我知道我必须意识到这一点

    【讨论】:

    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 2022-07-22
    • 2018-08-20
    • 2016-03-25
    • 2018-03-26
    • 2017-08-18
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多