Estou trabalhando no meu primeiro módulo NPM. Eu trabalhei brevemente com o texto datilografado antes e um grande problema era que para muitos módulos não havia arquivos de definição disponíveis. Portanto, pensei que seria uma boa ideia escrever meu módulo em texto digitado.
No entanto, não consigo encontrar nenhuma informação sobre a melhor maneira de fazer isso. Encontrei esta questão relacionada " Posso escrever pacote npm em coffeescript? ", Onde as pessoas sugerem publicar apenas os arquivos javascript. Mas, em contraste com os arquivos coffeescript, os arquivos datilografados podem realmente ser úteis se forem usados em um aplicativo datilografado.
Devo incluir arquivos Typescript ao publicar um módulo NPM ou devo apenas publicar os arquivos javascript e fornecer os arquivos .d.ts gerados para DefinitelyTyped?
fonte
Respostas:
Aqui está um módulo de Node de amostra escrito em TypeScript: https://github.com/basarat/ts-npm-module
Aqui está um projeto TypeScript de amostra que usa este módulo de amostra https://github.com/basarat/ts-npm-module-consume
Basicamente, você precisa:
commonjs
edeclaration:true
.d.ts
arquivoE depois
.d.ts
.O Atom-TypeScript fornece apenas um bom fluxo de trabalho em torno disso: https://github.com/TypeStrong/atom-typescript#packagejson-support
fonte
tsconfig.json
, mas isso parece muito manual na minha opinião.Com TypeScript 3.x ou TypeScript 2.x, as etapas a seguir descrevem o que você deve fazer para criar uma biblioteca (pacote npm) com TypeScript:
declaration: true
atsconfig.json
para gerar tipificações.index.ts
package.json
, aponte para suas digitações geradas. Por exemplo, se vocêoutDir
fordist
, adicione"types": "dist/index.d.ts"
ao seu pacote json.package.json
, aponte para o arquivo de entrada principal. Por exemplo, se o seuoutDir
édist
e o arquivo de entrada principal forindex.js
, adicione"main": "dist/index.js"
ao seu package.json..npmignore
para ignorar arquivos desnecessários (por exemplo, a fonte).npm publish
. Use as especificações do Semver para atualizações (correção de patch / bugnpm version patch
, adiçõesnpm version minor
ininterruptas, alterações de API de interrupçãonpm version major
)Já que demorei um pouco para vasculhar todos os recursos desatualizados sobre este tópico na internet (como o desta página ...), decidi encerrá-lo em como escrever uma biblioteca typecript com um exemplo mínimo de trabalho atualizado.
fonte
.npmignore
arquivo para dizer ao npm quais arquivos ignorar ao publicar (os.ts
arquivos) e um.gitignore
para dizer ao git quais arquivos ignorar (dist/
)Esta é uma resposta mais recente usando TypeScript 1.8.10:
A estrutura do meu projeto é:
Eu adicionei o seguinte
.npmignore
para evitar a inclusão de arquivos estranhos e manter o mínimo para ter o pacote importado e funcionando:Meu
.gitignore
tem:Meu
package.json
tem:Agora eu corro:
npm pack
O arquivo resultante (quando descompactado) tem a seguinte estrutura:
Agora vou para o projeto em que desejo usar isso como uma biblioteca e digito:
npm install ./project-1.0.0.tgz
É instalado com sucesso.
Agora eu crio um arquivo
index.ts
no meu projeto onde acabei de instalar o npmimport Project = require("project");
A digitação
Project.
me dá as opções do Intellisense, que foi o objetivo de todo este exercício.Espero que isso ajude alguém a usar seus projetos npm do TypeScript como bibliotecas internas em seus projetos maiores.
PS: Eu acredito que esta abordagem de compilação de projetos para módulos NPM que podem ser usadas em outros projetos é uma reminiscência do
.dll
no.NET
mundo. Eu poderia muito bem imaginar projetos sendo organizados em uma Solução no Código VS onde cada projeto produz um pacote npm que pode então ser usado em outro projeto na solução como uma dependência.Como demorei um bom tempo para descobrir isso, eu postei para o caso de alguém estar preso aqui.
Eu também postei para um bug fechado em: https://github.com/npm/npm/issues/11546
Este exemplo foi enviado ao Github: vchatterji / tsc-seed
fonte
Você deve publicar as fontes originais do texto datilografado em vez da definição do tipo. Em
package.json
deixar o ponto propriedade 'tipos' para o arquivo Ts *.*.d.ts
são bons para anotar bibliotecas JS existentes, mas como consumidor, prefiro ler o código do texto digitado do que alternar entre as definições de tipo e o código JS gerado de nível inferior.fonte
*.d.ts
é a maneira recomendada de fazê-lo, embora eu concorde com você os benefícios de incluir*.ts
arquivos, typescriptlang.org/docs/handbook/declaration-files/…Eu sigo principalmente a sugestão de Varun Chatterji
Mas, gostaria de mostrar um exemplo completo com teste de unidade e cobertura de código e publicá-lo
npm
e importá-los usandojavascript
outypescript
Este módulo é escrito usando
typescript 2.2
e é importante configurar oprepublish
gancho para compilar o código usandotsc
antes de publicá-lo no npmhttps://github.com/sweetim/haversine-position
https://www.npmjs.com/package/haversine-position
fonte
Você pode usar autodts para lidar com a distribuição e uso
.d.ts
arquivos do npm, também sem suporte do IDE Atom.autodts generate
irá agrupar todos os seus próprios.d.ts
arquivos para publicação no npm eautodts link
lidar com referências a outros pacotes instalados, que nem sempre podem estar diretamentenode_modules
em um projeto maior dividido em vários subpacotes.Ambos os comandos lêem suas configurações de
package.json
etsconfig.json
no estilo "convenção sobre configuração".Há outra resposta sobre stackoverflow e uma postagem de blog com mais detalhes.
fonte
Na Lossless, criamos uma ferramenta de desenvolvimento TypeScript única para pacotes npm: https://gitzone.gitlab.io/npmts/
fonte