因此,我在运行带有webpack的react-redux应用程序的节点计算机上有一个最简单的示例(尽管我认为这个问题无关紧要,因为它应该在nodejs上。)
特定呼叫获得价值包:
console.log(process.env.NODE_ENV); // output: 'development'
常规电话无济于事:
console.log(process.env); // output: {}
我在这里想念什么?
可能与 相关的附加信息:
dotenv
环境中使用test
。dotenv-webpack
。production
环境,我都不会使用它们答案 0 :(得分:1)
process.env
变量在浏览器中为空的问题是因为浏览器无法真正访问process
中的node.js
。它虽然在浏览器中运行。
process.env.ANYTHING
的使用通常是通过https://webpack.js.org/plugins/define-plugin/之类的插件来实现的,它们仅在构建期间简单地replace
出现任何带有env变量的process.env.ANYTINHG
。它确实确实很简单str.replace(/process.env.ANYTING/value/)
,这需要在构建期间完成,因为一旦输出dist bundle.js
,您将无权访问ENV
变量。
因此,您需要确保在生产生产版本时(例如,使用yarn build
)使用webpack.DefinePlugin
并将那些process.env
调用替换为当前的ENV值。它们不能在运行时注入。
当您需要在运行时访问环境变量时,在浏览器的JavaScript中基本上是不可能的。例如,NGINX可以利用某种黑客手段将当前env变量序列化为window.ENV
变量,在您的应用中,您将不使用process.env
而是window.ENV
。因此,您在构建应用程序时需要使ENV变量可用,或者需要构建机制将当前ENV作为json动态输出到window并通过react访问。如果您使用的是docker
,则可以使用ENTRYPOINT
完成,否则您将需要一些bash脚本,该脚本将始终将当前的ENV变量作为JSON
输出到应用程序的index.html
>