![](/img/trans.png)
[英]Can't link a JS script generated from a Kotlin/JS project using IntelliJ IDEA
[英]IntelliJ Angular Project with Kotlin/JS Library?
我有一个来自 Android 开发的 Java 代码库,我想在相同的网络应用程序版本中重用它。 库代码非常通用,因为它始终旨在可重复使用,并且在过去曾用于生成 Android/Java、App-Engine/Java、iOS/ObjC 和 GWT 应用程序。
环顾四周,我认为 web 应用程序的最佳框架是 Angular。将库代码重写为 Kotlin 应该是一项相对较小的任务,因为有工具可以完成大部分工作。 然后可以为 JVM(对于本机和后端应用程序)或 JavaScript(对于 web 应用程序)进行编译。
虽然支持/反对该计划的建议是受欢迎的,但我的实际问题是......
如何设置 IntelliJ 项目来执行此操作?
我认为明显的答案是两个模块:一个用于库,一个用于应用程序,但 IntelliJ 不允许创建 Kotlin 模块,只能创建一个 Kotlin 项目。
相反,我创建了一个 Kotlin/JS 项目,并使用 Angular/CLI 在其下方创建了应用程序模块(将来某个时候将在其旁边放置一个后端应用程序)。 库构建并运行示例应用程序,但我无法让后者包含前者生成的 JS(加上.d.ts
)代码,该代码位于build/
下的某个深层目录中。 所以也许我做错了......
哇,这很艰难,经过数小时的谷歌搜索和失败的尝试。 这是有用的东西。 也许我会在未来找到更清洁的方法,但目前这是可以接受的。
注意:我在 gradle 插件上浪费了太多时间。 如果它们不是第一方的,它们往往是无人维护的、缺乏文档记录的(主要是假设读者已经知道它们在做什么)并且已经过时了。 以下内容仅通过第一方支持程序完成。
使用 Angular/CLI 创建一个顶级项目,然后是应用程序和库的子项目:
ng new MyGeneralProject --no-create-application
ng generate library klib
ng generate application MyApp
现在在顶级目录中设置 Gradle(或等待并通过 IDE 执行此操作):
gradle init
gradle wrapper
在 IntelliJ 中打开顶层。 创建/编辑顶级build.gradle.kts
文件:
buildscript {}
plugins {}
repositories {}
更重要的是顶层settings.gradle.kts
文件:
rootProject.name = "MyProject"
include("projects:klib")
现在将访问projects/klib/gradle.build.kts
文件:
plugins {
kotlin("js") version "1.8.0"
}
repositories {
mavenCentral()
//jcenter()
}
dependencies {
//testImplementation(kotlin("test")) // The Kotlin test library
}
kotlin {
sourceSets {
all {
// allow @JsExport without opt-in each time
languageSettings.optIn("kotlin.js.ExperimentalJsExport")
}
val main by getting {
kotlin.srcDir("src")
}
}
js(IR) {
moduleName = "klib"
browser {
distribution {
directory = File("$projectDir/../../dist/$moduleName")
}
}
binaries.library()
}
}
上面使用了 Gradle 的kotlin("js")
插件,但它是由 JetBrains 作为 IntelliJ 的一部分提供的,它还维护 Kotlin 语言库。 虽然它的文档还假定您已经了解有关 Gradle 的所有信息,但它 n.netheless 工作得很好。
构建的 JS/TS 库将在顶级目录下创建为“dist/klib”。 此命名可能需要一些改进,但它是一个合理的起点。
在顶级tsconfig.json
文件中,在“compilerOptions”下,查找“paths”并根据需要进行更新。 我使用前导“@”来指示顶级导入位置:
{
...
"compilerOptions": {
...
"paths": {
"@klib": [
"dist/klib"
]
}
...
},
...
}
在projects/myapp/src/app/whatever.ts
文件中,访问转换后的 Kotlin 库:
import * as klib from '@klib'
然后整个库作为klib.blah.blah.blah
可用,IntelliJ 提供完整的完成语义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.