create-react-app .env:进程未定义

IT技术 reactjs
2021-05-24 17:03:50

create-react-app 应该将您的.env变量注入到您的 React 应用程序中。REACT_APP_在我的.env我的变量中使用了前缀.env.development

但是,在调试代码时,我发现它process本身是未定义的。因此,当尝试使用 访问环境变量时process.env.REACT_APP_SOMETHING_URL,根process变量未定义。

3个回答

所以当时我误解了如何 process.env在工作create-react-app我希望这在运行时可用。但是,由于 React 是一个前端库,并且process是一个 Node 后端实体,因此您无法process.env在浏览器中执行代码时直接访问

这是有道理的,因为在浏览器中执行的 Javascript 不知道 Node;因此,process.env不可用。

相反,在 webpack 构建期间,webpack 会将相应的环境变量注入到您的前端资产代码中。因此,如果您有生产.env文件,则在构建期间会提供这些变量。

$ yarn add --dev react-app-env

或者

$ npm install react-app-env --save-dev

好吧,让我首先说的process是一个 eventEmitter,如果你将它登录到浏览器中,它就存在于 nodejs 世界中,无论它是 angular、CRA、Vue、jquery,它们都将打印 undefined 因为在浏览器的上下文中它确实如此不存在。

现在在您可以使用的process.env.YOW_VARCRA 上,基本上 bcuz CRA 创建了一个 Obj 调用process.env,这就是为什么您需要为它们添加前缀的原因,我认为是 REACT_APP。

  
const YOW_VARS = Object.keys(process.env)
    .filter(key => REACT_APP.test(key))
    .reduce(
      (env, key) => {
        env[ key ] = process.env[ key ];
        return env;
      },
      {
        NODE_ENV: process.env.NODE_ENV || 'development',
      }
    );

  const s = {
    'process.env': Object.keys(YOW_VARS).reduce((env, key) => {
      env[ key ] = JSON.stringify(YOW_VARS[ key ]);
      return env;
    }, {}),
  };

他们或多或少有类似的东西