Необходимо рекурсивно применить загрузчик ко всем зависимостям определенного файла

#javascript #webpack #babeljs #babel-loader

#javascript #webpack #babeljs #babel-загрузчик

Вопрос:

Я создаю универсальное приложение JavaScript, которое полагается на один конфигурационный файл. Конфигурация содержит в основном код, который может быть безопасно выполнен на сервере и в браузере, но определенные файлы и функции должны выполняться только на стороне сервера.

Я создал плагин Babel, который я использую вместе с babel-loader , и я применяю этот загрузчик к самому конфигурационному файлу , а также к любому файлу, который требуется непосредственно из конфигурации, используя issuer правило Webpack:

Соответствующие загрузчики Webpack:

         {
          test: paths.config,
          use: [
            {
              loader: 'babel-loader',
              options: {
                plugins: [
                  [removeObjectProperties],
                ],
              },
            },
          ],
        },
        {
          issuer: paths.config,
          use: [
            {
              loader: 'babel-loader',
              options: {
                plugins: [
                  [removeObjectProperties],
                ],
              },
            },
          ],
        },
  

Плагин removeObjectProperties:

 function removeObjectProperties() {
  return {
    visitor: {
      ObjectProperty: function ObjectProperty(path) {
        if (['access', 'hooks'].indexOf(path.node.key.name) > -1) {
          // Found a match - remove it
          path.remove();
        }
      },
    },
  };
}

  

Используя приведенную выше конфигурацию Webpack, мой removeObjectProperties плагин успешно удаляет все свойства только для сервера как из конфигурации верхнего уровня, так и из любых модулей, которые требуются непосредственно из него.

Проблема в том, что issuer правило Webpack не применяется рекурсивно. Итак, если у меня есть файл, который требуется из файла, который требуется конфигурацией, загрузчик не применяется.

Я мог бы использовать некоторые рекомендации относительно того, как либо лучше достичь своих целей рекурсивного удаления определенных свойств объекта с помощью любого неизвестного количества требуемых модулей, либо определить какой-либо другой способ полностью отделить код только на стороне сервера от кода, который будет объединен и предоставлен браузерам.

Заранее благодарю вас!

Комментарии:

1. Попробуйте добавить каталог «требуемого» файла во включаемый ключ webpack.js.org/configuration/module/#ruleinclude используя этот синтаксис: webpack.js.org/configuration/module/#condition

2. Привет @ColdFridge — спасибо за ваше предложение. К сожалению, приложение позволяет пользователю размещать свои конфигурационные файлы где угодно, в том числе над каталогом, содержащим их базовый скрипт. Так что я не думаю, что это сработает. Кроме того, упомянутый вами подход может вызвать некоторые нежелательные побочные эффекты, такие как запуск загрузчика в файлах, которые полностью отделены от файлов конфигурации моего приложения.