微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Github 操作似乎无法在带有纱线工作区和 lerna 的 monorepo 中找到私有包

如何解决Github 操作似乎无法在带有纱线工作区和 lerna 的 monorepo 中找到私有包

我创建了一个基于纱线工作区和 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 的步骤似乎有一个奇怪的问题。首先,这是作业的配置方式:

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.

这似乎发生在每个包中,但第一个除外。那么,也许只是解决了第一个包的依赖关系?

我在互联网上上下搜索过,但无济于事。

解决方法

我认为这可能与符号链接的依赖项有关,因此 DTO 包仅在根级别可用,而不是直接在无服务器包中可用。

但我通过分离每个无服务器包的工作流程并直接安装依赖项来解决它。

name: Serverless deployment package-name
on:
  push:
    branches:
      - main
    paths:
      - 'packages/serverlessBackend1/**'

jobs:
  Deploy-to-AWS:
    runs-on: ubuntu-latest
    env: 
      NODE_AUTH_TOKEN: ${{ secrets.NPMRC_AUTH_TOKEN }}
    steps:
      - name: Check out repository code
        uses: actions/checkout@v2

      - name: Setup up node
        uses: actions/setup-node@v2
      
      - name: Provide profile credentials
        run: |
          aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY }} --profile my-profile-name
          aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }} --profile my-profile-name
      
      - name: Install dependencies
        run: cd packages/serverlessBackend1 && npm install

      - name: Deploy event backend to AWS dev
        run: cd packages/serverlessBackend1 && npm run deploy

这完全为我解决了。不是我最初问题的解决方案,因此没有将其标记为答案,但我认为我的发现或许可以帮助其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。