【问题标题】:Nx - 'Unable to write a reference...' error when using run-commands builderNx - 使用运行命令生成器时出现“无法写入引用...”错误
【发布时间】:2022-01-17 02:11:45
【问题描述】:

我在构建一个依赖于同一 Nx 工作区中另一个库的库时遇到了一个特殊错误。我正在使用运行命令构建器,因为在初始库构建之后需要调用其他一些任务。

我看到“无法编写参考...”类型错误消息,例如

Unable to write a reference to SomethingCoolComponent in /Users/robert.parker/Documents/Github/nx-playground/libs/common-components/src/lib/components/something-cool/something-cool.component.ts from /Users/robert.parker/Documents/Github/nx-playground/libs/common-components/src/lib/common-components.module.ts
ERROR: Something went wrong in @nrwl/run-commands - Command failed: nx base-build shiny-components

我有一个可复制的 repo,我可以在这里展示 https://github.com/parky128/nx-playground 使用几个最小的库,两者之间存在依赖关系。

安装依赖后,只需运行ng run shiny-components:build 并查看发出的错误。

如果我不使用 run-commands 构建器,而只是在同一个库上运行 ng run shiny-components:base-build 任务,它构建得很好,所以我责怪运行命令,但我不确定它为什么会中断。

我已经看到this answer 与同一问题相关,尽管他们似乎没有使用运行命令并且对他们来说归结为路径导入问题,但我认为这不是我的问题的原因在这里。

【问题讨论】:

  • 运行 ng run shiny-components:base-build 也会对我抛出同样的错误

标签: angular nrwl-nx nrwl


【解决方案1】:

这里的问题是你引入了一个全新的目标名称base-build,nx 不知道如何构建。

有两个问题:

幸运的是,您可以正确配置工作区:

  1. 更新nx.json 中的targetDependencies 选项:

    "targetDependencies": {
      "build": [
        {
          "target": "build",
          "projects": "dependencies"
        }
      ],
      "base-build": [  <== add this
        {
          "target": "base-build",
          "projects": "dependencies"
        }
      ]
    },
    
  2. angular.json中的common-components重命名或引入相同的目标名称:

    "common-components": {
       "projectType": "library",
       "root": "libs/common-components",
       "sourceRoot": "libs/common-components/src",
       "prefix": "rob",
       "architect": {
         "base-build": {  <========================= this line
           "builder": "@nrwl/angular:package",
           "outputs": ["dist/libs/common-components"],
    

更新

我认为还有更好的方法:不要重命名常见目标buildlinttest 等)而是只重命名您的自定义目标强>

angular.json

"build-with-task": {
      "builder": "@nrwl/workspace:run-commands",
      "options": {
          "commands": [
              "nx build shiny-components",
              "echo done"
          ],

现在,您应该能够运行以下命令之一:

ng run shiny-components:build
ng run shiny-components:build-with-task

这是你的 repo 的最终 PR https://github.com/parky128/nx-playground/pull/1/files

【讨论】:

  • 谢谢!您的建议使我走上了解决原始项目中问题的正确道路。将相同的基础构建目标添加到我的公共库中可以让事情再次正常运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2021-10-31
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
相关资源
最近更新 更多