tsc --module всегда генерирует один и тот же вывод независимо от аргумента
-
12-12-2019 - |
Вопрос
Я новичок в Javascript, NodeJS и, очевидно, TypeScript.Я хотел бы поэкспериментировать со службами компилятора в src/services
(Windows) для обеспечения IntelliSense и т. д.для редактора.
Насколько я могу судить, мне нужно иметь возможность require
код служб TypeScript на сервере NodeJS и связываться с ним из редактора.Мне не удалось найти какой-либо код служб TypeScript, специфичный для NodeJS, поэтому я думаю, что мне придется скомпилировать код служб с помощью --module amd
чтобы сделать его доступным для NodeJS через RequireJS.
Если вышеизложенное верно, мои попытки скомпилировать код служб с помощью --module amd
дает точно такие же результаты, как и использование типа модуля по умолчанию (см. ниже).
$ tsc.cmd --module amd --out amd.js .\languageService.ts
$ tsc.cmd --out comm.js .\languageService.ts
$ diff.exe .\amd.js .\comm.js
$
Решение
Это, по общему признанию, сбивает с толку, но код в LanguageService.ts не находится в «модуле» в смысле определения «модуля» в AMD/RequireJS.
Спецификация относится к вещам внутри module
блок как «внутренние модули».Это то, что вы видите в LanguageService.ts.Вы можете думать о них скорее как о контейнерах или синглтонах, которые предоставляют имя верхнего уровня (рассмотрение кода, созданного для простого внутреннего модуля, немного проясняет это).Вы используете их как обычные объекты верхнего уровня без какого-либо загрузчика модулей.
Производство внешний модули (как они названы в спецификации) для require
делается путем помещения export
директива в объявлении верхнего уровня в файле .ts (см. раздел спецификации 9.2.1).Есть образцы (например.imageboard), доступный для скачивания, который сделает это, если вам интересно.
Другие советы
Ваши модули должны быть определены как export module
, Не твое module
а затем скомпилируйте его с помощью --m amd
или --module amd
.
Мне потребовалось несколько часов, чтобы осознать :)