使用KJSCompiler编译javascript后的JSCOMPILER_PRESERVE



使用KJSCompiler编译我的JavaScript源代码后(https://github.com/knyga/kjscompiler)我把这个奇怪的函数包裹在我的代码中。如果我试图将其包含在我的实时源代码中,我会在控制台中收到此错误"Uncaught ReferenceError:JSCOMPILER_PRESERVE is not defined"。

我认为出现这个问题是因为我没有在kjscompiler的JSON文件中添加"包装器"。尝试之后,它仍然会发生。

有人知道怎么解决这个问题吗?

当我通过Java API直接使用闭包编译器时,我发现了这一点。

这似乎是由于在仅检查模式下运行编译器,但启用了保护隐藏的副作用。在仅检查模式下,将跳过删除隐藏副作用保护的后期通行证。

我不确定KJSCompiler的具体情况,但考虑将编译级别更改为SIMPLE或ADVANCED,和/或如何控制对KJSCompile运行的检查和优化,例如关闭CompilerOptions.protectHiddenSideEffects,可能会有所帮助。

请参阅https://github.com/google/closure-compiler/issues/1875

除了Steve S的回答之外:设置优化级别后设置protectHiddenSideEffects作为选项。setProtectHiddenSide Effects(false);如果我在设置CompilationLevel之前设置了GCC版本v20180204,那么它对我来说不起作用。

    CompilationLevel.ADVANCED_OPTIMIZATIONS.setOptionsForCompilationLevel(compilerOptions);
    //To remove JSCOMPILER_PRESERVE error: https://github.com/google/closure-compiler/issues/1875
    compilerOptions.setProtectHiddenSideEffects(false);

最新更新