从 slack discussion复制过来
首先你需要在 gradle 中声明一个 npm 依赖
kotlin.sourceSets.named("jsMain") {
dependencies {
implementation(npm("package-name", "version"))
}
}
然后您可以使用 ./gradlew generateExternals 并祈祷 dukat 正常工作或自己编写外部声明。
package-name 和 version 与 package.json 中的显示相同,因此也支持所有像 file:xxx 这样的协议。
您也可以使用本地 TS 源破解它,但我不建议这样做。如果您仍然必须坚持使用它,请在您的存储库中的某处创建一个小型 npm 模块,然后通过 file:path/to/that/module 版本使用它。我建议在 gradle 中生成该模块的绝对路径,而不是尝试从 kotlin 插件生成的 package.json 中计算出相对路径
kotlin.sourceSets.named("jsMain") {
dependencies {
val pathToLocalNpmModule = rootProject.projectDir.resolve("js/my-module").canonicalPath
implementation(npm("my-module", "file:$pathToLocalNpmModule"))
}
}
最后,对于那个特定的函数,kotlin 外部声明看起来像这样(假设您将 package.json#main 字段直接指向该 js 文件)
// Explicit export
export function myJsFunc() { return "Hello from JavaScript"; }
// Default export
export default myJsFunc
// Explicit export
@JsModule("my-module")
public external fun myJsFunc(): String
// Default export
@JsModule("my-module")
@JsName("default")
public external fun myJsFunc(): String
现在反过来,如果你想将你的 kotlin/js gradle 模块集成到本地 js/ts 项目中,我建议只使用npm-publish gradle 插件提供的./gradlew pack 任务(自行配置,只需应用它)和在你的 js/ts package.json 中通过 file:xxx 版本协议使用包。