如何存储配置文件并使用React读取它

Dha*_*tel 75 javascript configuration flux reactjs webpack

我是react.js的新手我实现了一个组件,我从服务器获取数据并使用它,如,

CallEnterprise:function(TenantId){


    fetchData('http://xxx.xxx.xx.xx:8090/Enterprises?TenantId='+TenantId+' &format=json').then(function(enterprises) 
    {
        EnterprisePerspectiveActions.getEnterprise(enterprises);
    }).catch(function()
    {
        alert("There was some issue in API Call please contact Admin");
        //ComponentAppDispatcher.handleViewAction({
        //    actionType: MetaItemConstants.RECEIVE_ERROR,
        //    error: 'There was a problem getting the enterprises'
        //});
    });
},
Run Code Online (Sandbox Code Playgroud)

我想将Url存储在配置文件中,所以当我在测试服务器或生产上部署它时,我只需更改配置文件中的url而不是js文件,但我不知道如何在react.js中使用配置文件

任何人都可以指导我如何实现这一目标?

Pet*_*ela 105

使用webpack,您可以将env特定的配置放入该externals字段中webpack.config.js

externals: {
  'Config': JSON.stringify(process.env.NODE_ENV === 'production' ? {
    serverUrl: "https://myserver.com"
  } : {
    serverUrl: "http://localhost:8090"
  })
}
Run Code Online (Sandbox Code Playgroud)

如果您想将配置存储在单独的JSON文件中,那也可以,您可以要求该文件并分配给Config:

externals: {
  'Config': JSON.stringify(production ? require('./config.prod.json') : require('./config.dev.json'))
}
Run Code Online (Sandbox Code Playgroud)

然后在您的模块中,您可以使用配置:

var Config = require('Config')
fetchData(Config.serverUrl + '/Enterprises/...')
Run Code Online (Sandbox Code Playgroud)

不确定它是否涵盖了您的使用案例,但它对我们来说效果很好.

  • 这对我不起作用,我收到此错误:[错误:使用require('Config')时无法找到模块'Config'] (20认同)
  • 如果我想webpack不将seperate配置文件捆绑到output.bundle.js怎么办?如果它是一个单独的捆绑,我可以仍然需要('配置')?谢谢 (4认同)
  • 你是怎么让这个工作的?我完全按照建议完成,我得到'找不到模块'Config'',和@amgohan一样. (3认同)
  • 别客气.顺便说一下,我们已经了解到最好使用JSON来避免语法错误.我已相应更新了代码. (2认同)
  • 我无法让它工作:http://stackoverflow.com/questions/36065832/webpack-include-configuration-file-as-external-resource?noredirect=1#comment59778282_36065832 (2认同)
  • 嗯,我还没有意识到需要解析JSON文件.因为`externals`需要评估代码,所以需要对JSON进行字符串化. (2认同)
  • 更改后我不得不重启webpack (2认同)
  • 你能分享整个 webpack.config 或 github 中的应用程序吗?谢谢 (2认同)
  • 这个答案已经过时了,大多数人现在使用 create-react-app 来制作 React 应用程序,它不再提供 webpack.config.js 。如果您在使用 create-react-app 之后来到这里,请不要弹出您的配置!不要创建自己的 webpack 地狱。在另一个解决方案中使用 REACT_APP_ 环境变量,该变量会汇总到静态构建中。 (2认同)

ari*_*ris 47

如果您使用Create React App,则可以使用.env文件设置环境变量.文档在这里:

https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables

基本上在项目根目录下的.env文件中执行类似的操作.

REACT_APP_SECRET_CODE=abcdef
Run Code Online (Sandbox Code Playgroud)

您可以使用组件从组件访问它

process.env.REACT_APP_SECRET_CODE
Run Code Online (Sandbox Code Playgroud)

  • 只记得你的变量名**必须以`REACT_APP_`开头 (16认同)
  • 并且不要忘记在编辑后重新启动yarn/npm (8认同)
  • 将 .env 添加到根目录后,您必须在 npm 上重新启动项目 (3认同)
  • @Rob,重点不在于它是一个秘密,而是它会随着环境而改变。我有一个应用程序部署到全国四个数据中心的 1200 台服务器,每个数据中心最多 8 个集群,并且每个集群都应用本地 API 端点。你不想硬编码这样的东西...... (2认同)