当前位置: 首页 > 面试题库 >

是否可以在React项目中使用dotenv?

娄弘
2023-03-14
问题内容

我正在尝试设置一些环境变量(用于对dev / prod端点进行API调用,取决于dev / prod等的键等),我想知道使用dotenv是否行得通。

我已经安装了dotenv,并且正在使用webpack。

我的webpack条目是main.js,因此在该文件中require('dotenv').config()

然后,在我的webpack配置中,输入以下内容:

  new webpack.EnvironmentPlugin([
    'NODE_ENV',
    '__DEV_BASE_URL__'  //base url for dev api endpoints
  ])

但是,它仍未定义。如何正确执行此操作?


问题答案:

最简洁的答案是不。浏览器无法访问本地或服务器环境变量,因此dotenv无需查找。相反,您通常在设置模块中在React应用程序中指定普通变量。

可以使Webpack从构建机器中获取环境变量并将其烘烤到您的设置文件中。但是,它实际上是在构建时而不是运行时替换字符串。因此,应用程序的每个内部版本都将值硬编码到其中。然后可以通过process.env对象访问这些值。

var nodeEnv = process.env.NODE_ENV;

另外,您可以使用DefinePluginfor
webpack,它使您可以根据构建目标(开发,生产等)显式指定不同的值。请注意,您必须将JSON.stringify所有值传递给它。

new webpack.DefinePlugin({
    'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
}),

这对于任何种类的公共细节都很好,但是 绝不能用于任何种类的私钥,密码或API机密
。这是因为任何包含在其中的值都是可公开访问的,并且如果它们包含敏感的详细信息,则可能会被恶意使用。对于这类事情,您需要编写一些服务器端代码并​​构建一个简单的API,该API可以使用机密信息与第三方API进行身份验证,然后将相关详细信息传递给客户端应用程序。您的服务器端API充当中介,在保护您的秘密的同时仍可获取所需的数据。



 类似资料:
  • 当我使用jersey开发一个rest api应用程序时,我遇到了一个问题,我需要为特定的业务逻辑部分实现一个websocketendpoint。 我提出这个问题是因为我认为jersey与javaee-api工件之间存在一些依赖关系冲突。

  • 问题内容: 基本上,我有一个react组件,其功能主体如下:(这是我的理想组件,这意味着它当前不起作用) 问题答案: 不完全一样,但是有解决方法。在React的文档中有一节关于条件渲染,您应该看一下。这是使用内联if-else可以做什么的示例。 您也可以在render函数中处理它,但是要在返回jsx之前。 还值得一提的是ZekeDroid在评论中提到的内容。如果您只是检查条件而又不想呈现不符合要求

  • 问题内容: 我知道可以将AngularJs和Maven包含到一个Spring项目中,但是如何将其包含在Gradle中呢? 查看gradle存储库,我没有找到AngularJs条目。也许可以使用Gradle从Maven存储库中获取它?但是,如何做到这一点。 问题答案: 尽管在下面的讨论中发现,通过gradle下载angular没有意义,但是可以使用以下代码完成:

  • 问题内容: 我正在尝试从Maven内部执行繁琐的任务,而无需安装Node.js或任何东西。这是因为我不想将我的工件由Jenkins打包,也无法在该机器上安装Node.js。 我知道使用npm很容易,并且有一些命令可以使它正常工作,但是我也认为与maven集成应该很容易,问题是我不知道从哪里开始,因为我是npm的新手。 问题答案: 是的,使用frontend-maven-plugin,您可以通过Ma

  • 问题内容: 我正在使用Phonegap + React.js和Socket.io开发一个应用程序。但是,随后React-Native发行了,其原生感觉很棒。 我试图让socket.io-client与React Native一起工作,但是不幸的是没有成功。我做了一些研究,发现与此问题中描述的错误完全相同:https : //github.com/facebook/react- native/iss