1

有没有办法以模块化的方式向咖啡编译器添加预处理步骤?

比如说,我想用下划线函数增强所有数组和对象的功能,允许我做类似的事情testArray.first()并让它编译成_.first(testArray)

这在普通的 javascript 中是非常危险的,因为我必须扩展Array.prototype并且可能会破坏其他库中数组的功能。不过,使用咖啡脚本似乎既安全又有趣。

如果有一种方法可以做到这一点,那就太好了

  1. 模块化 - 我可以添加多个预处理步骤,从不同的项目中提取,从而以不同的方式使编程更加简单和优雅
  2. 集成 - 我希望能够更改咖啡脚本的配置文件中的某些内容,这样我就不必使用自定义二进制文件并替换每个调用咖啡编译器的开发工具中的命令(用于实时编译等) .

这是否存在于咖啡脚本中?如果没有,它似乎应该。如果没有人听说过,我会向开发人员提出。

4

1 回答 1

3

CoffeeScript 没有插件系统。如果你想定制它,没有简单的出路。您可以 fork 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 将咖啡编译和预编译步骤结合起来。我会推荐这种方法。

于 2015-10-08T09:24:20.257 回答