__PURE__

Build

在代码压缩的时候,由于压缩工具很难判断 JavaScript 代码的副作用,因此可能会将某些不需要使用的代码保留下来。针对 uglifyjs 或者 terserjs,可以通过 /*@__PURE__*/ 或者 /*#__PURE__*/ 这样的标签来显式声明定义是不包含副作用的。压缩工具在获取到这个信息之后,就可以放心的将未被使用的定义代码直接删除了。

相关的文档,可以参考 uglifyjsterserjs

或者,可以在 terser online 中尝试如下代码,观察编译结果的区别:

(function () {
  const unused = window.unknown();
  const used = 'used';

  console.log(used);
}());

上面的代码中,因为 window.unknown() 这个函数的调用细节对 terser 是不透明的,压缩工具无法判明使用是否会存在副作用。虽然 unused 这个变量没有被使用到,但是为了避免副作用丢失,terser 只能将 window.unknown() 调用保留下来。最终生成的压缩代码为:

!function(){window.unknown();console.log("used")}();

而如果将代码加上显式声明:

(function () {
  const unused = /*#__PURE__*/ window.unknown();
  const used = 'used';

  console.log(used);
}());

那么,terser 就可以放心的将整个调用删除。最终的压缩结果为:

console.log("used");