Я делаю библиотеку на основе TSDX , приятного и мощного CLI для разработки пакетов, который основан на Rollup и позволяет настраивать его конфигурацию. В моем проекте есть несколько SVG флагов стран, и мне нужно их импортировать и динамически показывать, когда они необходимы. Мне не было ясно, как там работает динамический импорт c, и это проблема TSDX или самого Rollup, поэтому я открыл об этом проблему в репозитории TSDX. Люди помогли мне, так что теперь есть два способа добиться этого:
- Использовать
rollup-plugin-copy
, а затем запрашивать все файлы статически с помощью оператора switch. - Использовать виртуальный модуль, который экспортирует объект, содержащий все имена файлов в каталоге, как описано здесь в одной из проблем 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 не оказывает технической поддержки на своей странице вопросов, поэтому я надеюсь, что кто-то здесь достаточно знаком с этим, чтобы помочь мне с этим материалом.