在 google 闭包编译期间删除 debugger 关键字

Remove debugger keyword during compilation in google closure

更新: 不再支持或维护JS版本的闭包编译器。 https://github.com/google/closure-compiler-npm/blob/master/packages/google-closure-compiler-js/readme.md


我正在尝试寻找是否有办法在编译过程中删除“调试器”关键字,我使用 javascript 版本 google-closure-compiler 和 gulp。

查看文档很明显我们可以通过执行以下操作在编译期间将标志设置为 stop/show 错误消息。

https://github.com/google/closure-compiler/wiki/Flags-and-Options

--jscomp_off

翻译成gulp,就是:

const googleClosureOptions = {
  ...
  jscomp_error:"checkDebuggerStatement"
}

然而,这可以通过抛出错误或显示警告来停止编译。

zyxcdafg.js:1444: ERROR - [JSC_DEBUGGER_STATEMENT_PRESENT] Using the debugger statement can halt your application if the user has a JavaScript debugger running.
                    debugger;
                    ^^^^^^^^^

但我想要实现的是删除 debugger 关键字。这有可能使用 googleclosure 来实现吗?我找不到与此相关的任何标志或选项。


更新: 不再支持或维护JS版本的闭包编译器。 https://github.com/google/closure-compiler-npm/blob/master/packages/google-closure-compiler-js/readme.md

不,我不这么认为。我建议你用别的东西来做。点赞sed:

find dist -name "*.js" -exec sed -i 's/\sdebugger;//' {} +

您的 dist 文件夹中的 find 文件会 .js 结尾,然后是 exec-ute seddebugger; 的所有实例替换为空。

您可以将其添加到调用 Closure Compiler 构建的脚本中。

编译器没有用于定义自定义代码删除通道的命令行 api,但编译器的体系结构确实允许注册自定义通道,并且删除调试器语句的通道应该是微不足道的:

    if (n.isDebugger()) {
        compiler.reportChangeToEnclosingScope(n);
        n.detach();
    }

一般结构如下:

https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/CheckDebuggerStatement.java