tsc --module siempre genera la misma salida sin importar el argumento
-
12-12-2019 - |
Pregunta
Soy bastante nuevo en Javascript, NodeJS y, obviamente, TypeScript.Me gustaría experimentar con los servicios del compilador en src/services
(Windows) para proporcionar intellisense, etc.para un editor.
Por lo que puedo decir, necesito poder require
el código de servicios TypeScript en un servidor NodeJS y comunicarse con él desde el editor.No pude encontrar ningún código de servicios TypeScript específico de NodeJS, así que creo que tendría que compilar el código de servicios con --module amd
para ponerlo a disposición de NodeJS a través de RequireJS.
Si lo anterior es correcto, mis intentos de compilar el código de servicios con --module amd
produce exactamente los mismos resultados que usar el tipo de módulo predeterminado (ver más abajo).
$ tsc.cmd --module amd --out amd.js .\languageService.ts
$ tsc.cmd --out comm.js .\languageService.ts
$ diff.exe .\amd.js .\comm.js
$
Solución
Es cierto que esto es confuso, pero el código en languageService.ts no está en un "módulo" en el sentido de la definición de "módulo" de AMD/RequireJS.
La especificación se refiere a cosas dentro de un module
bloque como "módulos internos".Eso es lo que estás viendo en languageService.ts.Puede pensar en ellos más como contenedores o singletons que exponen un nombre de nivel superior (mirar la generación de código para un módulo interno simple aclara esto bastante).Los consume como objetos normales de nivel superior sin ningún cargador de módulos.
Productor externo módulos (como los nombra la especificación) para require
se hace poniendo el export
directiva en una declaración de nivel superior en un archivo .ts (consulte la sección de especificaciones 9.2.1).Hay algunas muestras (p. ej.imageboard) disponibles para descargar que hacen esto si estás interesado.
Otros consejos
Tienes que tener tus módulos definidos como export module
, no tu module
y luego compilarlo con --m amd
o --module amd
.
Me tomó unas horas darme cuenta :)