繁体   English   中英

IntelliJ Angular 使用 Kotlin/JS 库的项目?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM