tsc --module sempre gera a mesma saída, não importa o argumento
-
12-12-2019 - |
Pergunta
Sou muito novo em Javascript, NodeJS e --obviamente-- TypeScript.Eu gostaria de experimentar os serviços do compilador em src/services
(Windows) para fornecer intellisense, etc.para um editor.
Tanto quanto posso dizer, preciso ser capaz de require
o código de serviços TypeScript em um servidor NodeJS e comunicar-se com ele a partir do editor.Não consegui encontrar nenhum código de serviço TypeScript específico do NodeJS, então acho que teria que compilar o código de serviço com --module amd
para disponibilizá-lo para NodeJS via RequireJS.
Se o acima estiver correto, minhas tentativas de compilar o código de serviços com --module amd
produz exatamente os mesmos resultados que usar o tipo de módulo padrão (veja abaixo).
$ tsc.cmd --module amd --out amd.js .\languageService.ts
$ tsc.cmd --out comm.js .\languageService.ts
$ diff.exe .\amd.js .\comm.js
$
Solução
Isso é reconhecidamente confuso, mas o código em languageService.ts não está em um 'módulo' no sentido da definição de 'módulo' da AMD/RequireJS.
A especificação refere-se a coisas dentro de um module
bloco como "módulos internos".Isso é o que você vê em languageService.ts.Você pode pensar neles mais como contêineres ou singletons que expõem um nome de nível superior (observar a geração do código para um módulo interno simples esclarece um pouco isso).Você os consome como objetos normais de nível superior, sem nenhum carregador de módulo.
Produzindo externo módulos (conforme nomeado pela especificação) para require
é feito colocando o export
diretiva em uma declaração de nível superior em um arquivo .ts (consulte a seção de especificações 9.2.1).Existem algumas amostras (por ex.imageboard) disponíveis para download que fazem isso se você estiver interessado.
Outras dicas
Você deve ter seus módulos definidos como export module
, não o seu module
e então compile-o com --m amd
ou --module amd
.
Levei algumas horas para perceber :)