create-react-app 应该将您的.env
变量注入到您的 React 应用程序中。我REACT_APP_
在我的.env
和我的变量中使用了前缀.env.development
。
但是,在调试代码时,我发现它process
本身是未定义的。因此,当尝试使用 访问环境变量时process.env.REACT_APP_SOMETHING_URL
,根process
变量未定义。
create-react-app 应该将您的.env
变量注入到您的 React 应用程序中。我REACT_APP_
在我的.env
和我的变量中使用了前缀.env.development
。
但是,在调试代码时,我发现它process
本身是未定义的。因此,当尝试使用 访问环境变量时process.env.REACT_APP_SOMETHING_URL
,根process
变量未定义。
所以当时我误解了如何 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_VAR
CRA 上,基本上 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;
}, {}),
};
他们或多或少有类似的东西