<a id="orge4a4a41"></a>
为什么要用 rescript
rescript 是一个实用的 functional language, 谁不喜欢 functional language 呢? 并且 type system 非常强大和灵活, 相信用 rescript 写出来的代码可读性会更好, 而且不容易出 bug. rescript 可以编译出可读性很强的 javascript 代码, 发到 screeps 线上使用的就是编译后的 javascript 代码. 由于可读性非常好, 特殊情况下可以直接修改输出的 javascript 代码调试.
可以渐进式的引入 rescript, 先把一部分代码用 rescript 写, 输出的 js 文件和其他原有的 js 一起使用. 和现有的 js 生态结合非常方便.
rescript 的语法非常简单, 在这系列文章中不会特别介绍语法. 读者如果有一定的编程经验, 应该都能比较容易读懂. rescript 中一些特别的 feature 在使用到的时候会介绍一下, 由于我也是刚开始使用 rescript, 所以可能会有错误, 欢迎 各位读者指正.
<a id="org4a31af4"></a>
创建一个 rescript 项目
在 rescript 的官网有两种创建 rescript 项目的方式, 一种是新建项目, 一种是在已有的项目中添加 rescript. https://rescript-lang.org/docs/manual/latest/installation 为了防止以后创建项目变动导致这文章中的部分内容过期, 这里就不详细介绍创建项目方式.
我使用的是创建新项目的方式
<a id="orgbf0286f"></a>
rescript 的 hello world
在新的 rescript 项目中, 可以用 npm run build 进行一次编译, 也可以用 npm run start 持续 watch 文件变化, 持续编译.
现在先尝试写一个简单的打印 hello world 代码, 然后把输出的 js 放到 screeps 中使用.
<a id="orga6c0cf3"></a>
hello world
首先创建一个 Hello.res 文件
Js.log("hello world")
使用 npm run build 或者 npm run start. 如果没有改默认编译输出的目录, 那么在 Hello.res 文件的同一个目录, 会出现一个 hello.bs.js 文件.
console.log("hello world");
<a id="org0fc416c"></a>
export rescript 中定义的函数
在上一个章节中编译出来的 js 代码, 没有 export, 其他的 js 模块无法使用. 这次需要修改 rescript 的编译配置文件 bsconfig.json, 增加
"package-specs": {
"module": "es6-global",
"in-source": true
},
"suffix": ".mjs",
这样编译出来的就是符合 es6 规范的 js module.
这次修改一下源代码, 定义一个打印 hello 的函数
let hello = () => Js.log("hello world")
let 是定义变量和函数(函数也是变量)的关键字, 语法很类似 js 的箭头函数. 整体的意思是, 有一个不接收任何参数, 函数体打印 hello world 的函数. 将这个函数绑定到 hello 变量上.
编译出来的代码就会是
function hello(param) {
console.log("hello world");
}
export {
hello ,
}
现在就可以在其他的 js 文件中, import hello.mjs, 然后使用 hello 函数了.
<a id="orga13e204"></a>
总结
这篇文章介绍了 rescript 的 setup, 如何用 rescript export 函数给 js 使用. 感兴趣的读者可以尝试 export 一些工具函数给 js 使用了, 过程中可以会遇到各种问题, 在下一篇文章中会一起踩坑. 下一篇文章中主要会介绍如何创建一个能跑起来的 rescript screeps 项目.
网友评论