Estou criando uma biblioteca de componentes React compartilhável.
A biblioteca contém muitos componentes, mas o usuário final pode precisar usar apenas alguns deles.
Quando você agrupa o código no Webpack (ou Parcel ou Rollup), ele cria um único arquivo com todo o código .
Por motivos de desempenho, não quero que todo esse código seja baixado pelo navegador, a menos que seja realmente usado. Estou certo ao pensar que não devo agrupar os componentes? O pacote deve ser deixado para o consumidor dos componentes? Deixo mais alguma coisa para o consumidor dos componentes? Transpilei o JSX e é isso?
Se o mesmo repositório contiver muitos componentes diferentes, o que deve estar no main.js?
imported
no código, diminuindo o tamanho do pacote.Respostas:
Essa é uma resposta extremamente longa, porque essa pergunta merece uma resposta extremamente longa e detalhada, pois o caminho das "melhores práticas" é mais complicado do que apenas algumas respostas em linha.
Como mantivemos nossas bibliotecas internas por mais de 3,5 anos, decidimos de duas maneiras que eu acho que as bibliotecas deveriam ser agrupadas, as compensações dependem do tamanho da sua biblioteca e, pessoalmente, compilamos as duas maneiras para agradar os dois subconjuntos de consumidores.
Método 1: Crie um arquivo index.ts com tudo o que você deseja expor exportado e o pacote cumulativo de destino nesse arquivo como entrada. Agrupe toda a sua biblioteca em um único arquivo index.js e arquivo index.css; Com dependência externa herdada do projeto do consumidor para evitar a duplicação do código da biblioteca. (essência incluída na parte inferior do exemplo de configuração)
import { Foo, Bar } from "library"
Método 2: Isso é para usuários avançados: crie um novo arquivo para cada exportação e use rollup-plugin-multi-input com a opção "preserveModules: true", dependendo de como o sistema css que você está usando também precisa ter certeza de que seu css NÃO é mesclado em um único arquivo, mas cada arquivo css requer (". css") é deixado dentro do arquivo de saída após o rollup e esse arquivo css existe.
next-transpile-modules
pacote npm.import { Foo,Bar } from "library"
e depois com babel o transformem em ...Temos várias configurações de rollup em que realmente usamos os dois métodos; portanto, para os consumidores da biblioteca que não se importam com a trepidação de árvores, basta
"Foo from "library"
importar e importar o único arquivo css; e para os consumidores de bibliotecas que se preocupam com a trepidação de árvores e apenas usando CSS crítico, eles podem simplesmente ativar nosso plug-in babel.Guia de rollup para práticas recomendadas:
se você está usando
"rollup-plugin-babel": "5.0.0-alpha.1"
texto datilografado ou não, construa SEMPRE com Verifique se o seu .babelrc se parece com isso.E com o plug-in babel em rollup parecido com este ...
E o seu package.json parecendo ATLEAST assim:
E, finalmente, seus externos em rollup parecendo ATLEAST assim.
Por quê?
Finalmente, aqui está uma essência para um exemplo de arquivo de configuração de rollup de saída de arquivo index.js. https://gist.github.com/ShanonJackson/deb65ebf5b2094b3eac6141b9c25a0e3 Onde o destino src / export / index.ts se parece com isso ...
Entre em contato se tiver algum problema com o babel, o pacote cumulativo ou tiver alguma dúvida sobre o empacotamento / bibliotecas.
fonte
É possível ter arquivos separados gerados para cada componente. O Webpack tem essa capacidade definindo várias entradas e saídas. Digamos que você tenha a seguinte estrutura de um projeto
O arquivo Webpack seria algo parecido com isto
Mais informações sobre "divisão de código" estão disponíveis nos documentos do Webpack
Há um único campo no
package.json
arquivo chamadomain
, é bom colocar seu valor delib/index.js
acordo com a estrutura do projeto acima. E noindex.js
arquivo tem todos os componentes exportados. Caso o consumidor queira usar um único componente, é possível acessá-lo simplesmenteBem você decide. Descobri que algumas bibliotecas do React são publicadas da maneira original, outras - estão agrupadas. Se você precisar de algum processo de construção, defina-o e exporte a versão em pacote.
Espero que todas as suas perguntas sejam respondidas :)
fonte
Você pode dividir seus componentes como o lodash está fazendo pelos métodos deles.
O que você provavelmente tem são componentes separados que você pode permitir importar separadamente ou através do componente principal.
Então o consumidor pode importar o pacote inteiro
ou suas partes individuais
Os consumidores criarão seus próprios pacotes configuráveis com base nos componentes que importam. Isso deve impedir que todo o pacote seja baixado.
fonte
Você deve dar uma olhada no Bit , acho que é uma boa solução para compartilhar, reutilizar e visualizar componentes.
É muito fácil de configurar. Você pode instalar sua biblioteca de bits ou apenas um componente com:
Em seguida, você pode importar o componente no seu aplicativo com:
A parte boa é que você não precisa se preocupar em configurar o Webpack e todo esse jazz. Bit ainda suporta o controle de versão de seus componentes. Este exemplo mostra um componente de reação da lista de títulos para que você possa ver se isso atende aos seus requisitos ou não
fonte
Há uma configuração no webpack para criar arquivos de bloco. Para começar, ele criará o pacote principal em vários blocos e o carregará conforme necessário. se o seu projeto tiver módulos bem estruturados, ele não carregará nenhum código que não seja necessário.
fonte