【发布时间】:2021-10-01 22:50:12
【问题描述】:
我创建了一个基于 yarn 工作空间和 lerna 的 monorepo,其中包含以下包类型:
- UI网站包(Vue Vite应用)
- DTO 包(私有 npm 包)
- n 个后端包(AWS 无服务器)
我的项目结构看起来像这样
root
-- package.json
-- packages/
--- ui/
---- package.json
---- dist/
--- dto/
---- package.json
---- dist/
--- serverlessBackend1/
---- package.json
---- build/
--- serverlessBackend2/
---- package.json
---- build/
--- serverlessBackendN/
---- package.json
---- build/
DTO 包主要包含在所有其他包中使用的类型,因此它在我的包的每个 package.json 中都列为依赖项。
在我的根 package.json 我有以下三个基本的 lerna 脚本:
{
[...]
"workspaces": [
"packages/*"
],
"scripts": {
"build": "lerna run build",
"publish": "lerna publish --conventional-commits --yes",
"deploy": "lerna run deploy"
},
"dependencies": {
[...]
},
"devDependencies": {
[...]
}
}
现在我想创建一个 github 操作管道,它负责将不同的包分发到它们的目的地。网站包的 Ftp 上传,将 dto 包发布到 npm 并将所有无服务器项目部署到 AWS。
由于我对 Github 操作非常陌生,因此我已经通过官方文档、自述文件、其他项目、stackoverflow 问题挖掘了自己的方式,并设法建立了一个管道,它适用于三种情况中的两种。
不幸的是,我想将所有无服务器程序包部署到 AWS 的步骤似乎有一个奇怪的问题。首先,这是 Job 的配置方式:
Deploy-to-AWS:
runs-on: ubuntu-latest
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: recursive
token: ${{ secrets.GITHUB_TOKEN }}
- name: Installing dependencies
run: yarn
- name: Add AWS credentials with profile
run: |
aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY }} --profile ${{ secrets.PROFILE_NAME }}
aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }} --profile ${{ secrets.PROFILE_NAME }}
- name: Deploy to AWS dev
run: yarn deploy
当我在我的根目录中本地执行 yarn deploy 时,一切都按预期工作,并且每个无服务器包中的 deploy 脚本都被执行并且所有包都被正确部署。这就是package.json 在无服务器包中的样子:
{
[...]
"scripts": {
"build": "tsc",
"runDeployment": "serverless deploy -v --aws-profile my-profile-name",
"deploy": "npm run build && npm run runDeployment"
},
"dependencies": {
"@userName/my-private-dto-package": "^0.3.2",
[...]
},
"devDependencies": {
[...]
}
}
但是当我在 Github 操作工作流程中尝试相同的操作时,我收到一个错误,即找不到我的私有包模块:
2nd-serverless-package: path/to/file/where/dto/is/imported.ts(1,88): error TS2307: Cannot find module '@userName/my-private-dto-package' or its corresponding type declarations.
这似乎发生在每个包裹上,但第一个包裹除外。那么也许只是为第一个包解决了依赖关系?
我在互联网上上下搜索过,但无济于事。
【问题讨论】:
标签: amazon-web-services yarnpkg github-actions serverless monorepo