如何使用webpack + reactjs的环境变量?

时间:2016-07-03 18:11:13

标签: reactjs webpack react-jsx

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

现在我有3个环境,可以进行本地化,开发和生产。

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

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

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

我如何实现上述目标?

1 个答案:

答案 0 :(得分:4)

所以我尝试了一些事情并通过以下方式解决了上述问题: -

在我们的webpack配置中添加 DefinePlugin 。以下是我的webconfig: -

 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)

现在,如果你看到我们设置了NODE_ENV'用cli输入所以当'NODE_ENV'作为值生成,webpack会自动缩小您的输出包。

现在说我们在文件中声明了API url(我有Constants.jsx),所以我们将以下内容添加到constants.jsx中。我们可以在这个Constants.jsx中读取webpack config中设置的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();