В Webpack, как NodeSourcePlugin может решить, добавлять ли полифиллы после удаления / оптимизации мертвого кода? - PullRequest
0 голосов
/ 23 апреля 2020

Если у меня есть код, использующий Buffer, но он оптимизируется во время минимизации, я не хочу, чтобы полифилл Buffer был включен.

У меня есть код, использующий Buffer, поэтому, когда я создаю для производства, NodeSourcePlugin распознает, что моя цель - webworker, и автоматически связывает Buffer полизаполнение. Это замечательно, поскольку он предотвращает взлом моего кода при его запуске в среде, отличной от Node.js, но я также использую DefinePlugin для отключения некоторого кода в рабочей среде.

Например, мой конфиг содержит:

new webpack.DefinePlugin({
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
})

Затем у меня есть такой код:

public static btoa(s: string) {
  if (process.env.NODE_ENV) {
    return Buffer.from(s).toString('base64')
  } else {
    return btoa(s)
  }
}

Однако, после того, как я запустил сборку для цели webworker, это сводится к следующему:

static btoa(t){return btoa(t)}

Buffer больше не используется, но в комплекте все еще присутствует полифилл. Хотя я могу удалить его вручную, добавив node: {Buffer: false} в конфигурацию моего веб-пакета, это нежелательно, потому что в конечном итоге мне может понадобиться Buffer для какого-то другого кода или зависимости в будущем.

Это похоже на Polyfill добавляется до того, как оптимизация завершена, но мне интересно, есть ли способ быть умнее с этим.

...