Как получить файлы stati c, которые динамически обслуживаются с помощью Rollup (и работают с разрешением узла)? - PullRequest
0 голосов
/ 06 марта 2020

Я делаю библиотеку на основе TSDX , приятного и мощного CLI для разработки пакетов, который основан на Rollup и позволяет настраивать его конфигурацию. В моем проекте есть несколько SVG флагов стран, и мне нужно их импортировать и динамически показывать, когда они необходимы. Мне не было ясно, как там работает динамический импорт c, и это проблема TSDX или самого Rollup, поэтому я открыл об этом проблему в репозитории TSDX. Люди помогли мне, так что теперь есть два способа добиться этого:

  1. Использовать rollup-plugin-copy, а затем запрашивать все файлы статически с помощью оператора switch.
  2. Использовать виртуальный модуль, который экспортирует объект, содержащий все имена файлов в каталоге, как описано здесь в одной из проблем Rollup (# 2463).

Мне хочется написать оператор switch вручную для всех флагов стран не самая лучшая идея в моей жизни, поэтому я подумал, что второй путь лучше, так как он не требует от меня поддержки большего количества кода, потому что он просто сгенерирует код, который мне нужен. Поэтому я настроил небольшой пакет TSDX для тестирования с одним компонентом React, который выглядит следующим образом:

import test from 'testmodule'

export default function () {
  return test
}

Теперь testmodule - это то, что должно быть решено в Rollup. У меня есть этот конфиг сейчас:

module.exports = {
  rollup (config) {
    config.plugins.unshift({
      name: 'plugin-test-module',
      resolveId (id) {
        console.log('resolveId', id);

        if (id === 'testmodule') {
          return id;
        }

        return null;
      },
      load (id) {
        if (id === 'testmodule') {
          return 'export default "Test is successful"';
        }

        return null;
      },
    });

    return config;
  },
};

Итак, что должно произойти, мне просто нужно увидеть «Тест пройден успешно» в браузере. К сожалению, npm run build завершается с ошибкой Cannot find module 'testmodule'. Я положил console.log в resolveId(), чтобы посмотреть, что происходит, и похоже, что он никогда не получит testmodule в id. Я заменил unshift просто прямым назначением config.plugins (таким образом, он удаляет другие плагины Rollup), и он успешно скомпилирован, хотя я понимаю, что это плохо, поэтому это не решение. Я прочитал документы Rollup, и кажется, что некоторые другие плагины, добавленные TSDX, например node-resolve, могут пытаться разрешить импорт вместо моего плагина, но я не могу найти способ остановить это. Поэтому главный вопрос - как заставить мой плагин работать вместе с другими, такими как node-resolve.

Если вас интересует, какие другие плагины использует TSDX, их можно найти здесь . Похоже, что Rollup не оказывает технической поддержки на своей странице вопросов, поэтому я надеюсь, что кто-то здесь достаточно знаком с этим, чтобы помочь мне с этим материалом.

...