Gradle 多项目构建 - 如何处理本地 npm 项目依赖

Lou*_*dsi 5 node.js npm build.gradle gradle-multi-project-build gradle-kts

该项目正在构建一个 Angular 应用程序。

我需要应用程序构建来使用另一个本地项目的结果,该项目是一个 javascript 库。

Gradle 用于在 com.github.node-gradle.node 节点插件的帮助下构建这两个项目。

项目结构很简单

root
- Project App
- Project Library
Run Code Online (Sandbox Code Playgroud)

其中 App 取决于 Library 的输出。

更准确地说,应用程序需要项目库上“npm pack”的输出。

在 App 项目中,我声明了对库项目的本地 npm 依赖,这是 npm pack 的结果。(.tgz 文件)

 "dependencies": {
    "library": "file:../library/build/library-0.0.1.tgz"
 }
Run Code Online (Sandbox Code Playgroud)

如何将库项目的结果声明为构建输出并将其声明为应用程序项目的依赖项输入?

使用 java-library 插件,它会是这样的:

dependencies {
  api(project(":library"))
}
Run Code Online (Sandbox Code Playgroud)

目标是 gradle 将首先构建 Library 项目,然后再构建 App 项目。如果他在请求构建 App 时能够检查库源代码是否已更改或不触发构建,那就更好了。

在两个项目上构建都是这样完成的:

  tasks{
    register<com.moowork.gradle.node.npm.NpmTask>("build") {
        dependsOn("npmInstall")
        setArgs(setOf("run-script", "build"))
    }
}
Run Code Online (Sandbox Code Playgroud)

package.json 中库项目的构建脚本是

  "scripts": {
     "build": "ng-packagr -p ng-package.json && cd ./build && npm pack ../dist"
  }
Run Code Online (Sandbox Code Playgroud)

我看过很多关于如何使用 java 插件执行此操作的文档,但我没有找到任何非 java 项目的好例子。

任何帮助将不胜感激,使用 kotlin dsl 会更好:-)