Use o TSLINT para verificar se há importações inválidas entre pacotes e pastas em seu projeto TypeScript.
Validação e documentação automáticas da arquitetura de pacotes (via tslint-folders-diagrams ).
O TSLint-Folders é estável e em uso todos os dias nas compilações de CI e em caixas de dev (Linux, Mac, Windows) para pelo menos um produto importante.
Economize tempo gasto em codificação manualmente revisando para erros 'bobos', como:
file-name-casing de regra TSLINT padrão permite apenas 1 estilo) Usamos o Semver para versões. Para as versões disponíveis, consulte os lançamentos.
yarn add tslint-folders
Edite seu tslint.json para ter uma entrada "rulesDirectory" que aponta para TSLint-Folders.
Normalmente seria como:
"rulesDirectory": "./node_modules/tslint-folders/dist/lib/"
Consulte TSLINT.TSLINT Folders.json para um exemplo.
As regras do TSLINT estão ativadas e configuradas em tslint.json .
Consulte a seção em tsf-folders-imports-between-packages em tslint.tslint-folders.json ou nos testes de unidade para exemplos.
Opcionalmente, você pode dividir a configuração do TSLint-Folders em um arquivo separado, como tslint.tslint-folders.json . Para fazer referência ao arquivo, adicione este código a tslint.json :
"extends": "./tslint.tslint-folders.json"
Supondo que o TSLINT já esteja em vigor, agora você deve ver quaisquer importações inesperadas (ou testes desativados) sejam sinalizados pelo TSLINT. Isso deve funcionar como de costume para o TSLINT: na linha de comando ou em um editor como o Código Visual (pode exigir atualização do editor).
Consulte TSLint-Folders-Diagrams
Um diagrama pode ser gerado automaticamente a partir da mesma configuração usada para validar o código:

Consulte TSLint-Folders-Diagrams para obter detalhes.
Aqui está um resumo das regras personalizadas atuais.
| ID da regra | Descrição |
|---|---|
| Test-test-Disableders-Disabeds | Detecte um teste de unidade desativado, suíte de teste ou teste de integração. |
| Nomes de arquivos de dobras TSF | Valida a carcaça de nomes de arquivos. Semelhante à file-name-casing de regra padrão, exceto que ele suporta múltiplos invólucros permitidos, e desalta os nomes de arquivos com caracteres inválidos (como espaços ou vírgulas). |
| TSF-Folders-Import-Disounded Folders | Detecte uma importação de uma pasta não padrão como Node_modules |
| TSF-Folders-Imports-Bet-Packages | Detecte uma importação de um pacote de 'nível superior': por exemplo, importar de um pacote 'shell' do aplicativo quando estiver dentro de uma pacote de 'área'. Esta é a principal regra personalizada. Também pode detectar quando um pacote tem importações usando o nome deste pacotes (em vez de um caminho relativo). |
| TSF-Folders-teste-With-Breakpoint | Detecte quando um teste de integração tem um ponto de interrupção como browser.debug() |
| site | Url |
|---|---|
| código -fonte (github) | https://github.com/mrseanryan/tslint-folders |
| Página do Github | https://mrseanryan.github.io/tslint-folders/ |
| npm | https://www.npmjs.com/package/tslint-folders |
Todas as regras usam o mesmo prefixo tsf-folders- .
Para deixar claro para os desenvolvedores que uma regra personalizada está envolvida, todas as mensagens das regras também incluem o ID da regra.
Algumas dessas regras podem ser substituídas pela configuração padrão do TSLINT. No entanto, ter regras personalizadas fornece mensagens mais claras para ajudar o desenvolvedor a saber o que corrigir (ou que regra para desativar esse código).
Algumas das regras não são estritamente sobre 'pastas', mas estão incluídas aqui, pois também parecem úteis.
Para mais detalhes e exemplos, consulte os testes de unidade
Para trabalhar no código-fonte dos TSLint-Folders, existem alguns scripts:
| comando | descrição |
|---|---|
| construção de fios | Construa as regras para a pasta 'dist', de onde elas podem ser executadas. |
| fiano de fio | Tipina o código -fonte das regras. |
| Início do fio | Construa, testes e fiage o código. |
| Teste de fio | Testes as regras contra arquivos de especificações (*.lint) |
| Teste de fios um | Teste uma única regra contra arquivos de especificações (*.lint) |
Os testes de unidade para a regra tsf-folders-imports-between-packages estão aqui.
Os testes de unidade usam dados de teste para verificar os limites da embalagem de um site bastante típico.
A configuração correspondente pode ser vista em tslint.tslint-folders.json
Os dados do teste são baseados em um site que usa vários pacotes:
| Nome do pacote | Descrição |
|---|---|
| concha | O shell do aplicativo - este é o pacote de nível superior e pode importar de qualquer outro pacote. |
| TODO-AREA | Uma área de 'TODO App' do site, hospedada no shell. Não deve importar a partir do shell ou de outros pacotes de 'área'. |
| TODO-Contact | Uma área de 'informações de contato' do site, que está hospedada no shell. Não deve importar a partir do shell ou de outros pacotes de 'área'. |
| pacote de grade | Uma grade da interface do usuário usada por pacotes de área. Não deve importar outros pacotes reconhecidos. |
| UTILS | Um pacote 'UTILS' usado pelos pacotes de shell e área. Não deve importar outros pacotes reconhecidos. |
Exemplo de validação : 'shell' deve ser capaz de importar da 'area da areia', mas não o contrário (o shell está em um nível mais alto de abstração e também deseja evitar dependências bidirecionais).
Os TSLint-Folders também podem validar as importações entre os sub-dobradores de um pacote.
Os dados do teste 'pacote' area 'são configurados com sub-oscilantes bastante típicos, como' componentes 'e' modelos '. tslint.tslint-folders.json foi configurado para verificar as importações entre essas pastas.
| Nome do subestimado | Descrição |
|---|---|
| componentes | Pasta de nível superior dos componentes da interface do usuário. Pode importar de qualquer uma das outras pastas reconhecidas. |
| ViewModels | Pasta de modelos de exibição, usados pelos componentes da interface do usuário. Só pode importar de modelos ou utilitários. |
| modelos | Pasta de modelos, usados pelos modelos de exibição. Só pode importar dos utilitários. |
| UTILS | Uma pasta 'utils'. Não deve importar outras pastas reconhecidas. |
Exemplo de validação : 'componentes' devem ser capazes de importar de 'modelos', mas não o contrário (os componentes estão em um nível mais alto de abstração e também desejam evitar dependências bidirecionais).
Veja o readme contribuinte.
Este projeto é baseado no excelente projeto do projeto de tipas-escreva-star-star-star.
O projeto foi iniciado a evitar ter que corrigir repetidamente problemas de codificação semelhantes em grandes bases de código tipadas.
Veja aqui
É isso. Deixe -me saber se isso é útil ou como pode ser melhorado!
Trabalho original de Sean Ryan - Mr.Sean.ryan (em gmail.com)
Este projeto está licenciado sob a licença do MIT - consulte o arquivo de licença para obter detalhes