Я пытаюсь создать библиотеку компонентов, используя typescript
и rollup
.
У меня есть компонент, Canary
.
function Canary() {
...
}
export default React.memo(Canary)
Обратите внимание, как Canary
обернут в HoC (React.memo
).
У меня есть другой компонент, SomeComponent
function SomeComponent() {
...
}
export default SomeComponent
Если бы я собирал свою библиотеку с помощью только SomeComponent
экспорта,
src/index.ts
export { default as SomeComponent } from './SomeComponent'
Библиотека является древовиднойshakeable. Однако, если я добавлю компонент, который обернут в HoC, смена дерева завершится неудачей. Независимо от того, как я импортирую SomeComponent
из моей библиотеки, Canary
извлекается вместе с ним и попадает в пакет.
Я использую вариант this , чтобы определить,что-то такое, что может измениться или нет, изменено для накопительного пакета.
Я нашел это , в котором говорится о том, как вы можете подсказывать такие инструменты, как веб-пакет. Я настроил тестовый проект, используя NextJS (веб-пакет, используемый внутри), и добавил sideEffects: false
к package.json
моей библиотеки безрезультатно - Однако , я не думаю, что это мой код это разрушает тряску деревьев, я думаю, что это React.memo
HoC. Он должен быть помечен pure в дистрибутиве.
, т.е. вручную редактировать строку вывода
var index = React.memo(Canary);
export { index as Canary }
в
var index = /*#__PURE__*/memo(Canary);
и повторный запуск тестов на установление связи с деревьями.
Вопрос Как правильно сообщить Rollup, что вы хотите отметить что-то чистое? Я даже иду на это в правильном направлении?