【问题标题】:Writing javascript applications with Kotlin使用 Kotlin 编写 javascript 应用程序
【发布时间】:2016-03-27 17:57:38
【问题描述】:

我最近开始研究 Kotlin 并设法创建了我的第一个 JVM 应用程序。拥有一种可以同时编译为 Java 和 JS 的语言真是太酷了。所以,现在我开始玩 Kotlin2js 并尝试了解 Javascript 的互操作性,以及使用 jQuery 等 JS 框架的可能性。

我发现了一些博客文章和示例: http://blog.jetbrains.com/kotlin/2013/10/writing-kotlin-in-the-browser/ http://blog.jetbrains.com/kotlin/2014/12/javascript-interop/ https://github.com/JetBrains/kotlin/blob/master/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/kotlin2JsProject/mainProject/src/main/kotlin/example/main.kt

是否有 Kotlin JS 库的文档? http://kotlinlang.org/api/latest/jvm/stdlib/index.html尚未提及

我首先编译了一个简单的示例应用程序,它使用 import kotlin.browser.* 和 gradle 作为构建系统(最后和 some help here 一起工作,再次感谢!)。比我将项目导入 IDEA 突然它不再编译了,我不得不将导入更改为 import js.dom.html.*。那么,我猜它使用了不同版本的库? (除了 kotlin2js 之外,IDEA 还在我的 build.gradle 中添加了 apply plugin: 'kotlin',我想这不起作用。)

IDEA 将 kotlin-jslib.jar 复制到 lib,在其 Manifest 中显示为“Implementation-Version: 0.7.270”。使用 gradle 编译时,我使用了 kotlin 1.0.1-1,我很确定我在创建项目时也在 IDEA 中选择了这个版本。

那么,了解 Kotlin2js 和 Kotlin-js-lib 的最佳信息来源是什么? 尤其是 Javascript 的互操作性,如何使用 jQuery 之类的框架(kotlin-js-lib 中似乎有 jQuery 支持),以及如何使用其他尚不支持 Kotlin 的框架。我知道 Kotlin 有 dynamic 关键字,http://blog.jetbrains.com/kotlin/2014/12/javascript-interop/ 提到 noImpl ,当我尝试使用它时会导致编译错误。 也许目前最好的方法是查看 Kotlin 源代码?

嗯,这是一个涉及多个方面的相当长且非结构化的问题,但这是我目前学习 Kotlin 的状态:-) 也许其他人也遇到同样的问题。

【问题讨论】:

  • 简短的回答是您应该至少等到 Kotlin 1.1。 Kotlin JS 后端的工作在 1.0 之前暂停,现在正在恢复。如果您尝试在当前状态下使用 JS 支持,您可能会设法让某些东西运行起来,但您会遇到很多问题。一旦 JS 支持更加完善,将会有更好的文档、IDE 支持以及您可能需要的一切。
  • 好吧,我想我会等待并暂时坚持使用 JVM 后端。谢谢!
  • Kotlin 1.1 宣布全面支持 JavaScript blog.jetbrains.com/kotlin/2017/01/kotlin-1-1-beta-is-here 的编译
  • 来了! kotlinlang.org/docs/reference/js-overview.html。还有一个由 Kotlin 团队开发的用于与 React 集成的库,即将开源。
  • 请注意,对于 Stack Overflow,请求外部资源是题外话。请参阅 off-topic要求我们推荐或查找工具、库或最喜欢的非现场资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。

标签: javascript jquery kotlin


【解决方案1】:

同时 Kotlin/JS 在 1.2 版本中可用,并且在官网上有 introductiontutorialreference

【讨论】:

    【解决方案2】:

    如果您有兴趣了解如何在 Node.js 应用程序中使用 Kotlin,我已经整理了一个启动项目,该项目运行一个用 Kotlin 编写的 node.js 服务器。 https://github.com/techprd/kotlin_node_js_seed

    这个项目的目的是编写一个完全用 Kotlin JS 编写的全栈 Web 应用程序

    让我知道你们对此的看法......

    【讨论】:

      【解决方案3】:

      使用下面的 pom:

      <?xml version="1.0" encoding="UTF-8"?>
      <project
              xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
              xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>com.example.kotlin</groupId>
          <artifactId>kotlin-js</artifactId>
          <version>1.0-SNAPSHOT</version>
          <packaging>pom</packaging>    
          <properties>
              <kotlin.version>1.3.61</kotlin.version>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      
              <kotlin.compiler.languageVersion>1.3</kotlin.compiler.languageVersion>
              <kotlin.compiler.apiVersion>1.3</kotlin.compiler.apiVersion>
      
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>org.jetbrains.kotlin</groupId>
                  <artifactId>kotlin-stdlib-js</artifactId>
                  <version>${kotlin.version}</version>
              </dependency>
          </dependencies>
      
          <build>
              <plugins>
                  <plugin>
                      <artifactId>kotlin-maven-plugin</artifactId>
                      <groupId>org.jetbrains.kotlin</groupId>
                      <version>${kotlin.version}</version>
                      <configuration/>
                      <executions>
                          <execution>
                                  <id>compile</id>
                                  <phase>compile</phase>
                                  <goals>
                                      <goal>js</goal>
                                  </goals>                        
                                  <configuration>
                                      <sourceDirs>
                                        <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
                                      </sourceDirs>
                                      <moduleKind>umd</moduleKind>
                                  </configuration>
                          </execution>
                      </executions>
                  </plugin>                                    
              </plugins>        
          </build>
      </project>
      

      src/main/kotlin 中,您可以添加包含fun main(args : Array&lt;String&gt;){println("hello")}Hello.kt

      那么下面会打印hello

      mvn clean package
      cd target
      npm i kotlin
      node js/kotlin-js.js
      

      或者您可以添加一个非主方法,然后使用其他 js 代码中的require() 或使用&lt;script&gt;(连同kotlin 运行时)将其添加到浏览器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        相关资源
        最近更新 更多