当前位置:   article > 正文

用Kotlin创建你的第一个Web页面_kotlin写前端

kotlin写前端

Kotlin可以开发Android, IOS, JavaScript和后端,是不是很激动?一门语言统一世界有木有~ 今天就写一篇傻瓜式教程,让你轻松学会用Kotlin开发Web页面。

环境准备

  • IntelliJ 2017.3.4 Ultimate Edition
  • Kotlin 1.2.3
  • Java 1.8
  • macOS Sierra 10.12.6

创建工程

1.png

 

2.png

 

3.png

创建好以后的空项目目录是这样的:

 

4.png

build.gradle文件的内容如下:

  1. buildscript {
  2. ext.kotlin_version = '1.2.30'
  3. repositories {
  4. mavenCentral()
  5. }
  6. dependencies {
  7. classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  8. }
  9. }
  10. group 'com.jiang.yanghai'
  11. version '1.0-SNAPSHOT'
  12. apply plugin: 'java'
  13. apply plugin: 'kotlin2js'
  14. sourceCompatibility = 1.8
  15. repositories {
  16. mavenCentral()
  17. }
  18. dependencies {
  19. compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
  20. testCompile "org.jetbrains.kotlin:kotlin-test-js:$kotlin_version"
  21. testCompile group: 'junit', name: 'junit', version: '4.12'
  22. }

创建文件

创建包名com.jiang.yanghai,并创建Main.kt

  1. package com.jiang.yanghai
  2. fun main(args: Array<String>) {
  3. }

resources目录下创建创建index.html,内容如下

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Kotlin JavaScript Example</title>
  6. </head>
  7. <body>
  8. <div id="root"></div>
  9. </body>
  10. </html>

我们会用到kotlinx:kotlinx-html-js这个库,所以在build.gradledependency中加入

compile "org.jetbrains.kotlinx:kotlinx-html-js:0.6.9"

Tips:

  • 使用默认配置,你不一定能够下载这个库,所以如果你遇到问题请将 mavenCentral()改为jcenter()

  • 另外我所用的环境会遇到依赖下载下来但是在编译的时候依然出现 can not find org.jetbrains.kotlinx:kotlinx-html-js:0.6.9的错误,在Project Structure中将对应的依赖库先删除然后再下载一次依赖,即可解决

    6.png

好啦,一切准备就绪,我们可以开始写代码咯!

编码

我们在Main.kt中加入一下代码

  1. package com.jiang.yanghai
  2. import kotlinx.html.*
  3. import kotlinx.html.dom.create
  4. import kotlinx.html.js.onClickFunction
  5. import kotlin.browser.document
  6. fun main(args: Array<String>) {
  7. // get the root tag of html file
  8. var root = document.getElementById("root")
  9. // create a div tag which contains a h1 tag and a button
  10. var div = document.create.div {
  11. h1() {
  12. + "Hello JavaScript"
  13. }
  14. button(classes = "btn") {
  15. + "Click Me!"
  16. onClickFunction = { println("Clicked!!!")}
  17. }
  18. }
  19. // add div tag to root
  20. root!!.appendChild(div)
  21. }

resources目录下创建创建styles/main.css,内容如下:

  1. .btn { // 这是为了告诉你如何显示的设置class
  2. color: red;
  3. }
  4. h1 { // 隐式设置class
  5. color: blue;
  6. }

build.gradle文件中加入以下内容

  1. sourceSets.main {
  2. kotlin.srcDirs += 'src/main/kotlin'
  3. resources.srcDirs += 'src/main/resources'
  4. }

编译

注意: 这里编译分为两种形式,第一种点击 Build > Build Project,第二种使用gradle build 或者点击Gradle面板中的Tasks下面的build任务,我猜可能是目前Intellij对Kotlin支持方面的问题,这两种编译行为的结果是不太一样的。因此对应的index.html的写法也会稍微的有点不一样,这是因为我们要在index.html中去引用编译出来的js文件。

使用第一种方式编译,会在项目路径下生成out目录

7.png

要让页面正确展示,我们需要将index.html的内容写成这样:

  1. <!DOCTYPE html>
  2. <html>
  3. <html>
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Sample Default</title>
  7. <link rel="stylesheet" href="styles/main.css"> // css文件
  8. </head>
  9. <body id="BODY">
  10. <h1>Hello World</h1>
  11. <div id="root"/>
  12. <script type="text/javascript" src="../classes/lib/kotlin.js"></script> // kotlin javascript标准库文件
  13. <script type="text/javascript" src="../classes/lib/kotlinx-html-js.js"></script> // kotlinx-html 库文件
  14. <script type="text/javascript" src="../classes/KotlinJSExample_main.js"> </script> // Main.kt编译出来的 js 文件
  15. </body>
  16. </html>

好了,到这里你已经可以在浏览器打开index.html文件看看效果啦!大功告成!

点击按钮可以在console中看到打印出来的信息Clicked!!!

8.png

使用第二种方式编译会比较复杂一点,但能让我们能更好的控制编译过程和产出的产品目录,所以有必要掌握!

首先在build.gradle中加入以下内容

注意: 经过笔者的亲测,这里的moduleKind只能选择 umd,否则编译出来的js文件无法正常运行!

  1. compileKotlin2Js {
  2. kotlinOptions.outputFile = "${projectDir}/web/scripts/main.js"
  3. kotlinOptions.moduleKind = "umd" //这里注意哦,一定是umd
  4. kotlinOptions.sourceMap = true
  5. }
  6. build.doLast() {
  7. // Copy kotlin.js and kotlin-meta.js from jar into web directory
  8. configurations.compile.each { File file ->
  9. copy {
  10. includeEmptyDirs = false
  11. from zipTree(file.absolutePath)
  12. into "${projectDir}/web/lib"
  13. include { fileTreeElement ->
  14. def path = fileTreeElement.path
  15. path.endsWith(".js") && (path.startsWith("META-INF/resources/") || !path.startsWith("META-INF/"))
  16. }
  17. }
  18. }
  19. // Copy resources to web directory
  20. copy {
  21. includeEmptyDirs = false
  22. from new File("src/main/resources")
  23. into "web"
  24. }
  25. }

接着我们需要修改index.html文件的内容如下

  1. <!DOCTYPE html>
  2. <html>
  3. <html>
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Sample Default</title>
  7. <link rel="stylesheet" href="styles/main.css">
  8. </head>
  9. <body id="BODY">
  10. <h1>Hello World</h1>
  11. <div id="root"/>
  12. <script type="text/javascript" src="lib/kotlin.js"></script>
  13. <script type="text/javascript" src="lib/kotlinx-html-js.js"></script>
  14. <script type="text/javascript" src="scripts/main.js"></script>
  15. </body>
  16. </html>

这样编译出来的目录包含两部分,下半部分就可以作为最终的产品部署到服务器上!

9.png

打开浏览器试试吧!

后记

这篇文章中讲的是使用纯kotlin库开发web页面,其实目前JetBrains官方已经适配了Reactkotlin-wrappers 就是github上的代码,并且还发布了一个工具包create-react-kotin-app,对于做前端开发的你,这名字是不是很眼熟?后续我会写一篇教程讲讲如何用Kotlin开发React应用。



转载地址:https://www.jianshu.com/p/df38cfb89838

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/580962
推荐阅读
相关标签
  

闽ICP备14008679号