严格模式兼容性
重要
VM 混淆需要在编译时就知道代码是否运行在严格模式下。如果您的代码依赖严格模式的行为,必须显式声明。
为什么? VM 会在执行前把您的代码编译为字节码。它需要在编译期间了解严格模式上下文,才能为严格模式特有的行为(例如 this 绑定、重复参数、arguments 对象的行为)生成正确的字节码。
strictMode 选项控制混淆器如何判断。在 strictMode: null(默认)和 strictMode: false 下,只有代码自身声明了严格模式的地方才会被视为严格模式:显式的 'use strict'; 指令、ES 模块语法或类方法。其他所有代码都按非严格模式编译。strictMode: true 会把所有输入都视为严格模式。请与最终的包实际运行的上下文保持一致。
文件级严格模式
在文件顶部添加 'use strict';,即可为所有代码启用严格模式:
函数级严格模式
如果只有部分函数需要严格模式,可以在这些函数内部添加 'use strict';:
常见问题: 如果您的打包工具或构建工具会自动添加 'use strict';(例如把 CommonJS 或普通脚本源码包裹成严格模式输出的打包工具),而您在打包之前就对源码进行了混淆,VM 就无从得知严格模式。请在源文件中添加该指令、设置 strictMode: true,或在打包之后再进行混淆。
