Node.js externs用于闭包编译器?

时间:2016-02-13 07:31:43

标签: google-closure-compiler

首先:“官方”(?)node.js externs位于:https://github.com/google/closure-compiler/tree/master/contrib/nodejs

但我无法使用它,因为生成的警告数量很多(有时会出现错误)。例如:“过程”模块的声明非常“薄”;只有在他的原型上定义了一个属性,除了不从EventEmitter继承,所以我不能注册回调,例如,我想在进程SIGINT(process.on('SIGINT',callback))上做一个干净的工作。

当我混合声明node.js的核心模块的几个externs文件时,会引发越来越多的警告和错误(我总是尊重externs之间的deps树)。例如:如果我包含events.js和stream.js externs文件,则会引发错误,因为“event”global var被重新声明:一旦进入事件并再次进入流中。

所以:我做错了什么?

我正在使用的闭包编译器是最新的git,whit --new_type_inf和--env标志已激活,等等。

1 个答案:

答案 0 :(得分:2)

  

例如:如果我包含events.js和stream.js externs文件,则会引发错误,因为"事件" global var重新声明:一旦进入事件并再次进入流中。

这突出了问题的核心 - 以及为什么它们维护得不好。编译器没有认识到这些变量实际上不是全局变量。编译器当前没有正确解释externs为模块的方法。最初是由项目的一个分支贡献和消费的,它可以将externs理解为模块。

我目前正致力于为此添加对编译器的支持,并希望有一天能够完全重写这个答案。

与此同时,您可以通过向文件添加@suppress {duplicate}注释来解决其中一些问题。但请记住,它们仍然是全球类型。

如果您希望改进文件(比如让进程正确扩展EventEmitter),我很乐意审核这些更改的拉取请求。