【发布时间】:2021-06-25 12:20:53
【问题描述】:
我使用 nodejs + typescript 创建了一个 monorepo,以使用 yarn 工作区发布一个 rest 端点。此服务器将在 Google Cloud Run 上运行并使用 Google Container Registry。
结构如下
my-project /
|
-> common/
package.json
|
-> server/
-> src
Dockerfile
package.json
|
-> client/
(react client that consume what server produce)
Common 是跨项目的“共享”文件夹,以便为类型提供单个包。我使用命名约定@my-project/common 作为通用包的名称以避免冲突。
然后,我在我的服务器代码中引用公共包:
在服务器的 json 包中
"dependencies": {
...
"@my-project/common": "1.0.0",
...
}
然后在实际代码中
import { MyType } from '@my-project/common/type'
如果值得的话,这里还有 Dockerfile:
FROM node:15-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn install
COPY ./dist ./
CMD [ "node", "server.js" ]
构建链是
- cd 到服务器文件夹
- 使用
yarn调用构建脚本,该脚本使用编译后的代码创建了dist/文件夹 - 执行
gcloud builds submit --tag gcr.io/my-gcp-project-12345/my-gcp-project推送到GCR
问题出在:Cloud Build 找不到通用包:
An unexpected error occurred: "https://registry.yarnpkg.com/@my-project%2fcommon: Not found".
是否可以在不将公共包推送到私有注册表的情况下找到解决方案?
【问题讨论】:
-
我宁愿使用
npm,所以也许我不明白一些事情:“使用yarn调用构建脚本以创建带有编译代码的dist/文件夹”是什么意思?至少在默认情况下yarn没有创建任何这样的目录......我不认为 js 正在创建“编译”代码...... -
嘿@vitooh 谢谢。在我的 package.json 中,“yarn build”调用 TSC 将 Typescript 转换为 JS,所以这是我的“编译”代码出现的地方。对于编译代码造成的混乱,我们深表歉意
标签: node.js docker gcloud google-cloud-run yarn-workspaces