Node.js 闭包编译器的外部?

Node.js externs for closure compiler?

首先:"official" (?) node.js 外部人员位于此处:https://github.com/google/closure-compiler/tree/master/contrib/nodejs

但我无法使用它,因为会生成大量警告(有时还会出现错误)。例如:"process"模块的声明很"thin";他的原型上只定义了一个 属性,而且没有继承自 EventEmitter,所以我无法注册回调,例如,我想在进程 SIGINT (process.on('SIGINT', 回调)).

当我混合几个声明 node.js 核心模块的 externs 文件时,会出现越来越多的警告和错误(我总是尊重 externs 之间的 deps 树)。例如:如果我包含 events.js 和 stream.js externs 文件,则会引发错误,因为 "event" 全局变量被重新声明:Once in events and again in stream.

所以:我做错了什么?

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

For example: If i include the events.js and stream.js externs files, an error is raised because the "event" global var is redeclared: Once in events and again in stream.

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

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

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

如果您希望改进文件(例如让流程正确扩展 EventEmitter),我将很乐意审查此类更改的拉取请求。