node.js - 如何部署具有本地 npm 依赖项的 GAE 服务?
问题描述
我是 Google Cloud 的新手,似乎不知道如何部署具有同级本地依赖项的 Google App Engine 服务。我有一个这样的项目结构(我的堆栈是 TypeScript、nestJS、React):
-frontend
app.yaml
package.json
-backend
app.yaml
package.json
-common
package.json
dispatch.yaml
包将frontend
静态代码部署到default
服务,backend
包部署到api
服务。该common
包包含一些我想在前端和后端之间共享的代码。他们将其包含在他们的package.json
文件中,如下所示:
dependencies: {
common: "file:../common"
}
这种结构在本地运行良好。问题是,当我部署后端时,npm install
失败了,因为它找不到common
包。这是有道理的,因为我知道它只会将内容上传backend
到该服务。但是实现这一目标的正确方法是什么?
我想我可以只部署一个包含所有代码的服务,并让我的顶级package.json
委托npm start
到后端的package.json
. 但这只是因为我的前端是完全静态的,所以我只有一个需要npm start
调用的包。似乎应该有更好的方法来处理这个问题,因为如果我有两个单独的后端,每个后端都需要自己的npm start
.
我猜我正在以一种根本错误的方式思考这方面的某些方面,但我需要帮助弄清楚那是什么。
解决方案
我在使用 Firebase 时遇到了类似的情况,我想在前端和后端之间共享代码,而不必在两个地方维护更改。
由于您使用的是 Typescript,因此您可以简单地使用tsc
Typescript 编译器,通过在文件中配置输出,将您的公用文件输出到前端和后端文件夹tsconfig.json
。 https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
对于前面,您将其输出为.js
文件,然后将其加载为<script src='myCommonFile.js>
. 在后面,你会require
或import
它。
然后诀窍是以这样的方式编写代码,它可以在浏览器和节点环境中使用。引用此 SO 帖子中的代码:
(function(exports){
// Your code goes here. For example:
exports.test = function(){
return 'hello world'
};
})(typeof exports === 'undefined'? this.mymodule = {} : exports);
因此,如果exports
未定义,则必须在浏览器中,在这种情况下mymodule
,在window
(ie, this
) 上声明。或者,如果exports
已定义,则它在node
上下文中,在这种情况下,您只需var mymodule = require('mymodule')
. 在任一环境中,您都可以将其用作mymodule.test()
. 漂亮!
推荐阅读
- javascript - 如何将这个 Shader 函数翻译成 JS?
- python - 将字符串变量或字符串数组从 python 传递到 curl 脚本
- terraform - Terraform 中的 Prometheus 配置和部署
- google-bigquery - 如何修复 BigQuery 中对更新计划查询的临时中断访问?
- javascript - 使用 google book api (vanilla js) 获取缩略图的问题
- python - Tensorbaord中每个时间步长的线图?
- java - Setter 没有按照应有的方式在 SpringBoot 项目中保存变量
- macos - 在 MacOS/Metal(英特尔 CPU、离散和内部 GPU)上渲染时,帧率会经常下降
- python - 图像处理中的多线程 - 视频 python opencv
- python - 从 numpy ndarray 索引多个最小值