【问题标题】:How to use environment variables with webpack+reactjs?webpack+reactjs如何使用环境变量?
【发布时间】:2016-11-05 11:44:29
【问题描述】:

我正在使用 webpack 编译我的 Reactjs 文件。在我的项目中,我需要对后端进行 API 调用。

现在我有 3 个本地环境、开发环境和生产环境。

所以我有一个 constants.jsx 文件,我在其中声明了以下内容:-

export const url= 'http://localhost:8002/api/v0';

所以在我的组件中,我从上面导入 url 并使用它们来调用 APIS,但是我需要如何根据它是本地、开发还是产品来更改上面的变量。

上面我该如何实现?

【问题讨论】:

标签: reactjs webpack react-jsx


【解决方案1】:

所以我尝试了一些事情并通过执行以下操作解决了上述问题:-

在我们的 webpack 配置中添加一个 DefinePlugin。以下是我的网络配置:-

 plugins: [
    new BundleTracker({filename: './webpack-stats.json'}),
    new webpack.DefinePlugin({
    'process.env': {
      'NODE_ENV': JSON.stringify(process.env.environment),
    }
  })
  ],

现在在编译时我们使用以下命令:-

environment=local webpack (for local)
environment=development webpack(for dev)
environment=production webpack(for prod)

现在,如果您看到我们使用 cli 输入设置了“NODE_ENV”,那么当“NODE_ENV”作为生产值时,webpack 会自动缩小您的输出包。

现在假设我们在文件中声明了 API url(我有 Constants.jsx),所以我们将以下内容添加到 constants.jsx。我们可以在这个 Constants.jsx 中读取 webpack 配置中设置的 NODE_ENV,然后通过从这里导出来将它们导入到调用 APIS 的组件中。

const api_url=function(){
  let api_url='';
  if(process.env.NODE_ENV == 'local'){
    api_url= 'http://localhost:8002/api/v0';
  }
  else if(process.env.NODE_ENV == 'development'){
    api_url = 'https://development/api/v0';
  }
  else if(process.env.NODE_ENV == 'production'){
    api_url = 'https://production/api/v0';
  }
  return api_url;
}

export const url= api_url();

【讨论】:

  • const api_url 函数似乎有点冗长?你能以其他方式做到这一点吗?
  • 冗长?能详细一点吗?
  • 将此示例与:stackoverflow.com/questions/38164102/… 进行比较
  • "scripts": { "build": "cross-env NODE_ENV=development webpack" 这是我的 dev 构建脚本,你能告诉我如何为不同的环境运行不同的脚本吗?我通过 maven pom.xml 运行它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多