Представьте, что у вас есть код ниже:
после прохождения этого кода через uglify-js вы получите следующий код:
uglify-js выполнит удаление мертвого кода, то есть удалит код, который не повлияет на результаты программы. Поскольку мы определили a
и b
в функции foo
, и мы не используем a
и b
в foo
, uglify-js безопасно удаляет его из углифицированного кода.
Однако, если вы видите из урезанного кода, foobar()
сохраняется. Это связано с тем, что вызов foobar
может иметь побочные эффекты для программы, поэтому uglify-js сохраняет foobar()
. Но поскольку нам не нужно возвращаемое значение foobar()
, которое присвоено a
, a
был удален с помощью uglify-js.
Что, если мы знаем, что foobar()
не вызовет никаких побочных эффектов?
Как сообщить uglify-js, что если мы не используем возвращаемое значение из foobar()
, удалите его также?
uglify-js будет рассматривать вызов функции как «чистый», если перед вызовом есть аннотация /*@__PURE__*/
или /*#__PURE__*/
комментария.
Например: /* @__PURE__ */ foobar()
!
Обратите внимание, что сейчас foobar()
удаляется!
Итак, чем это полезно?
Как автор библиотеки вы можете написать плагин babel, чтобы пометить вашу функцию как чистую, чтобы uglify-js мог отбросить вызов функции, если возвращаемое значение не используется в коде. (Есть утилитка из babel, которая просто отмечает функцию как чистую 😎)