Atualização: Você pode usar o npm package create-component-lib para automatizar todas as etapas descrita neste post.
Create React APP é facilmente a melhor ferramenta para criar e desenvolver aplicações React. Com um pouco de trabalho, também é possível usar para criar uma biblioteca de componentes React que pode ser publicado no npm e outras aplicações React. Aqui está o que você precisa fazer:
1 - Criando um novo projeto usando create-react-app:
create-react-app simple-component-library
2 - Delete todos arquivos dentro da pasta src/. e depois crie um novo arquivo App.js com algum código inicial:
3 - Crie uma nova pasta src/lib e coloque seus componentes React dentro dele. src/lib vai servir como a pasta raiz do módulo publicado no npm. Aqui está o código para um componente exemplo:
// src/lib/components/TextInput.jsimport React from "react";
import "./TextInput.css";
const TextInput = ({
type = "text",
label,
placeholder,
value,
onChange,
helpText
}) => (
<div className="simple-form-group">
{label && <label className="simple-text-label">{label}</label>}
<input
type={type}
className="simple-text-input"
value={value}
onChange={e => onChange && onChange(e.target.value)}
placeholder={placeholder}
/>
{helpText && <small className="simple-form-text">{helpText}</small>}
</div>
);
export default TextInput;
O estilo pode ser feito inline, ou em um arquivo CSS separado:
// src/lib/components/TextInput.css
.simple-form-group {
margin-bottom: 1rem;
}
.simple-text-label {
display: block;
color: red;
}
.simple-text-input {
display: inline-block;
margin-bottom: 0.5rem;
font-size: 16px;
font-weight: 400;
color: rgb(33, 37, 41);
}
.simple-form-text {
color: #6c757d !important;
display: block;
margin-top: 0.25rem;
font-size: 80%;
font-weight: 400;
}
Por último, podemos exportar o componente do src/lib/index.js para facilitar o importe:
import TextInput from "./components/TextInput";
export { TextInput };
Opcional, você pode também escrever testes para os componentes dentro de src/lib:
//src/lib/components/TextInput.test.js
import React from "react";
import TextInput from "./TextInput";
import renderer from "react-test-renderer";
describe("TextInput", () => {
it("renders properly", () => {
const tree = renderer
.create(<TextInput label="Email" placeholder="name@example.com" />)
.toJSON();
expect(tree).toMatchSnapshot();
});
});
4 - (Opcional) Use os componentes no src/App.js para criar exemplos para testes e debugging durante o desenvolvimento. Qualquer código colocado fora do src/lib não vai ser publicado no npm. Aqui está um exemplo usando o TextInput:
import React from "react";
import { TextInput } from "../lib";
const App = () => (
<div style={{ width: 640, margin: "15px auto" }}>
<h1>Hello React</h1>
<TextInput label="Email Address" placeholder="name@example.com" />
</div>
);
export default App;
Rode o comando npm start e navegue para http://localhost:300 para visualizar o resultado:
Dica: Use o react-live para criar um site de documentação editável ao vivo!
5 - Instale o babel-cli usando o comando npm i babel-cli — save-dev e crie um aquivo .babelrc na raiz do seu projeto com o seguinte conteúdo:
{
"presets": ["react-app"]
}
6 - Altere o script build dentro do package,json com o seguinte conteúdo:
"build": "rm -rf dist && NODE_ENV=production babel src/lib --out-dir dist --copy-files --ignore __tests__,spec.js,test.js,__snapshots__",
O comando npm run build agora transpilará o código dentro do src/lib (ignorando os testes e snapshots) dentro da pasta dist.
7 - Remova a linha “private”: true do package.json. Além disso remova o react-scripts, react e react-dom da dependencias, e coloque eles na devDependencies. Além disso você pode adicionar o react e react-dom como peerDependencies.
8 - Preparando a publicação, adicione o seguinte linha de código no package.json:
"main": "dist/index.js",
"module": "dist/index.js",
"files": [ "dist", "README.md" ],
"repository": {
"type": "git",
"url": "URL_OF_YOUR_REPOSITORY"
}
9 - Remova o texto default do arquivo README.md e crie um novo texto com alguma informação sobre a biblioteca.
# simple-component-library
A library of React components created using `create-react-app`.
## Installation
Run the following command: `npm install simple-component-library`
10 - Publicando no npm!
npm run publish
É isso! Agora você pode instalar sua biblioteca com o comando npm install simple-component-library e usar isso em qualquer projeto criado usando o Create React App.
Aqui está o código completo deste artigo:
Você pode clonar o repositório e usar ele para começar como ponto de partida para pular algumas dessas etapas. Espero que ajude!
Créditos
Creating a library of React components using Create React App, escrito originalmente por Aakash Rao N S
Obrigado por ler este artigo. Espero poder fornecer-lhes algumas informações úteis. Se sim, eu ficaria muito feliz se você recomendasse este post e clicasse no botão do ♥ para que mais pessoas possam ver isso.
Se houver perguntas ou você quiser adicionar algo aqui, por favor, deixe um comentário, ou me procure no Twitter.
Top comments (0)