有没有办法以模块化方式向咖啡编译器添加预处理步骤?
例如,假设我想用下划线函数扩充所有数组和对象的功能,允许我执行testArray.first()
之类的操作并将其编译为{{ 1}}
这在普通的javascript中非常危险,因为我必须扩展_.first(testArray)
并且可能会破坏其他库中数组的功能。但是,使用咖啡脚本似乎是安全而有趣的。
如果有办法以
的方式做到这一点会很棒这是否存在于coffeescript中?如果没有,它似乎应该。如果没有人听说过,我会跟开发者一起提出来。
答案 0 :(得分:3)
CoffeeScript没有插件系统。如果你想自定义它,没有简单的方法。您可以分叉CoffeeScript仓库,并根据您的要求修改编译器。但是,这意味着您必须通过定期从主仓库中提取更新来维护编译器的分支。
请参阅CoffeeScript编译器仓库(https://github.com/jashkenas/coffeescript/blob/master/lib/coffee-script/coffee-script.js#L195)中的以下代码:
....
o[k] = v;
}
o.bare = true;
js = compile(code, o);
if (sandbox === global) {
return vm.runInThisContext(js);
} else {
return vm.runInContext(js, sandbox);
}
....
您可以为此文件添加新方法
precompile = function (code) {
// do pre-processing here
}
并制作
js = compile(precompile(code), o);
我没有尝试过这个,所以你在做这件事的时候可能会碰壁。虽然你想要的改变很简单,不用担心词法分析器。
虽然,您可以编写自己的解析器来进行任何语言的更改,并使用grunt / gulp来组合咖啡编译和预编译步骤。我会推荐这种方法。