How to force google closure compiler to keep “use strict”; in the compiled js code?

后端 未结 5 1059
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-24 12:07

If you\'re using the module pattern and have something like this:

(function () {
   \"use strict\";
   // this function is strict...
}());

5条回答
  •  借酒劲吻你
    2020-12-24 12:45

    This isn't the greatest answer, but as far as I can tell this is a known issue or "feature" (depending on your perspective) of closure compiler. Here's a partial explanation of some of the problems involved. A couple mentioned are that there's no way to preserve file-level strict mode declarations when multiple files are combined, and the compiler's function inlining feature would break the scope of function-level strict mode declarations. Since the behavior of "use strict" declarations would be unpredictable/wrong in compiled code (potentially breaking programs when strict mode is misapplied to non-strict code), the compiler strips them like any other dead code.

    There seems to have been an idea to fully implement ECMAScript 5 strict mode checks in the compiler (in which case there would be no downside to removing it from compiled code), but it's not there yet.

    Compiling in SIMPLE_OPTIMIZATIONS mode instead of ADVANCED_OPTIMIZATIONS will disable dead code removal, but I suspect you already know that.

提交回复
热议问题