【发布时间】:2023-01-26 12:28:33
【问题描述】:
我有一个来自 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/ 下的某个深层目录中。所以也许我做错了......
【问题讨论】:
-
让生成的
.d.ts文件工作对我来说一直是个问题。我让它工作的方法是将本地路径依赖项添加到您的package.json(docs.npmjs.com/cli/v7/configuring-npm/package-json#local-paths)。然后,查看您的node_modules文件夹以确保它包含在内。最后,将node_modules/directory/**/*.js和node_modules/directory/**/*.d.ts添加到您的tsconfig.json。要导入类型,您需要导入com(或org或net,具体取决于您的组)命名空间,然后通过限定名称访问类型。 -
我的王国
Makefile!!!似乎顶层目录中的 Kotlin 代码只为 JS 构建了一次,我不知道为什么。即使删除生成的构建输出并选择“重建项目”也不会恢复它。也许我可以将这一切作为一个模块来完成,并在其他项目出现时只对公共/共享源目录进行符号链接? -
我使用了类似的东西——我有 2 个子目录用于我的 kotlin 和 js 模块,并通过
build.gradle.kts文件将它们注册为一个项目。您可以使用node-gradle-plugin将 npx 任务映射到 gradle 任务,然后在您的 kotlin 项目上使用任务依赖项以确保一切按顺序构建。如果需要,您甚至可以在此处添加自定义复制任务。
标签: javascript java angular kotlin intellij-idea