Node.js 使用本地、工作区依赖项和生产环境(如应用程序引擎)环境变量进行构建?

Node.js 使用本地、工作区依赖项和生产环境(如应用程序引擎)环境变量进行构建?,node.js,google-app-engine,yarnpkg,yarn-workspaces,google-appengine-node,Node.js,Google App Engine,Yarnpkg,Yarn Workspaces,Google Appengine Node,我一直在致力于通过Google App Engine部署一个完整的堆栈应用程序。如果我试图让应用引擎从源代码构建,谷歌的BuildPack显然不知道如何处理我的工作区依赖URL。因此,对于客户端,我只是在本地构建并部署静态资产。没问题。(这是一个局部解决方案,更间接地说,是一个解决方案) 这对于客户端来说很好,但我在部署后端时遇到了一个问题:显然,服务器应该监听应用引擎环境的PORT env var。我能想到的唯一方法是部署源代码,并允许通过Google应用引擎构建它;但是,正如我提到的,这与工

我一直在致力于通过Google App Engine部署一个完整的堆栈应用程序。如果我试图让应用引擎从源代码构建,谷歌的BuildPack显然不知道如何处理我的工作区依赖URL。因此,对于客户端,我只是在本地构建并部署静态资产。没问题。(这是一个局部解决方案,更间接地说,是一个解决方案)

这对于客户端来说很好,但我在部署后端时遇到了一个问题:显然,服务器应该监听应用引擎环境的PORT env var。我能想到的唯一方法是部署源代码,并允许通过Google应用引擎构建它;但是,正如我提到的,这与工作区依赖URL不兼容。如果在部署到GAE之前在本地构建node应用程序,它仍然会运行(甚至可以执行出口),但由于它没有侦听端口env var,服务器不会接受任何请求。我不想发布后端的工作区级别的dep

我相信一定有人有部署节点应用程序的经验,它既依赖于工作区级别的依赖项,也依赖于生产环境范围的环境变量。您能给我一些指导吗?

(编辑:最好采用jonrsharpe在上述评论中描述的范例——即从实际生产环境(即应用程序引擎)检索环境变量,而不是将它们烘焙到构建中。)


我只需要监听端口8081(也就是说,在本地构建端口设置为8081,然后部署构建的服务器)。也许8080被默认服务(在我的例子中是客户机)占用了,或者被nginx占用了。我不太确定,但我现在要继续。

为什么构建的后端应用程序不能访问环境变量?我对环境变量的引用在构建过程中得到解决(我正在构建/绑定一个节点应用程序和Webpack 5)。我从来没有考虑过编写一个应用程序,它在构建之后仍然会寻找环境变量。但是,我认为(可能是错误的)App Engine App.yaml中设置的环境变量是build env vars,而不是runtime env vars,因此该应用程序需要由App Engine生成,以便访问这些环境变量。不确定,因为8081端口解决方案(如下所示)阻碍了我更深入地研究此问题,因此看起来您可以同时拥有
构建环境变量
环境变量
。只要有可能,我都会避免构建时配置,因为这意味着您必须为不同的环境构建不同的构件,而不是构建一个构件并对其进行升级(我在中进行了详细解释),而且您不需要将服务器端代码与Webpack捆绑在一起。(顺便说一句,我忘了重点是尽量不在app.yaml中提供端口环境变量。我想这是为了监听端口运行时环境变量;但是,正如我提到的,我不知道如何做到这一点。)dotenv是一种简单配置开发环境的好方法,但在生产环境中,这些东西应该来自实际环境。您可能有Webpack的DefinePlugin(请参阅)将环境变量烘焙到实际代码中,这是一个问题(特别是对于应该保密的东西)。