Roy - node.js Modules
This week I was at linux.conf.au 2012 in Ballarat. I talked about altJS (languages that compile to JavaScript). The video is up on YouTube.
During my off-time, I worked on Roy’s modules branch and made it capable of importing and exporting node.js modules. The branch adds an “export” macro:
let obj = {x: 1, y: 2, t: "test"}
export obj
This will assign the identifier to the “exports” global specified by CommonJS Modules/1.0:
var obj = {
"x": 1,
"y": 2,
"t": "test"
};
exports["obj"] = obj;
My work on separate compilation causes a “.roym” file to be written during compilation:
obj: {x: Number, y: Number, t: String}
On the other side, there’s an “import” macro:
import "./structural"
let f o = o.x + o.y
f structural.obj
Which loads the “.roym” file and assigns the types under the module name and compiles to node.js compatible requires:
var structural = require("./structural");
var f = function(o) {
return o.x + o.y;
}
f(structural.obj)
That’s it. Type-safe node.js modules. Awesome.
I have a few things to continue with:
- Add flags to change macros to target browser globals and AMD modules
- Fix writing all top-level type information to the “.roym” file; only write exported values