avi*_*per 19 environment-variables node.js
因此,我在运行带有 webpack 的 react-redux 应用程序的节点机器上有一个最简单的示例(尽管我认为这对问题没有任何影响,但希望它在 nodejs 上)。
具体调用获取超值包:
console.log(process.env.NODE_ENV); // output: 'development'
Run Code Online (Sandbox Code Playgroud)
一般电话一无所获:
console.log(process.env); // output: {}
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
可能相关的附加信息:
dotenv的test环境。dotenv-webpack用于开发环境。production部署到 Heroku的环境中使用它们Mil*_*sky 12
这个问题process.env的变量是在浏览器空是因为浏览器不具有真正的访问process的node.js。虽然它在浏览器中运行。
的使用process.env.ANYTHING通常是通过像https://webpack.js.org/plugins/define-plugin/这样的插件来实现的,它只是在 BUILD 期间replace发生的任何process.env.ANYTINHGwith env 变量。这确实很简单,str.replace(/process.env.ANYTING/value/)这需要在构建期间完成,因为一旦您输出 dist,bundle.js您就无法访问ENV变量。
因此,您需要确保在生成生产构建时,例如yarn build使用当前 ENV 值使用webpack.DefinePlugin和替换这些process.env调用。它们不能在运行时注入。
当您需要在运行时访问 env 变量时,在浏览器中的 JavaScript 中基本上是不可能的。例如,NGINX 有一些技巧可以将当前的 env 变量序列化为变量,window.ENV并且在您的应用程序中您不会使用process.env但window.ENV. 因此,您需要在构建应用程序时使用 ENV 变量,或者构建将当前 ENV 作为 json 动态输出到窗口并通过 react 访问的机制。如果您正在使用docker它可以完成,ENTRYPOINT否则您需要一些 bash 脚本,该脚本将始终输出与您的应用程序JSON有关index.html的当前 ENV 变量