从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 文件)。
export function myJsFunc() { return "Hello from JavaScript"; }
export default myJsFunc
@JsModule("my-module")
public external fun myJsFunc(): String
@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
版本协议使用捆绑包。
webpack.config.d
文件夹中添加进一步的调整来解决这个问题。 - Shreck Ye