Определение имен модулей с помощью Typescript

#asp.net-mvc #requirejs #typescript

#asp.net-mvc #требуется js #typescript

Вопрос:

Я пытаюсь использовать TypeScript с RequireJS, но я получаю следующую ошибку:

Несоответствующий анонимный модуль define().

Я понимаю, это потому, что Typescript не выдает имя модуля, и я сам загружаю скрипты на страницу (я делаю это, поскольку они определены как предварительно определенный пакет в проекте MVC).

В настоящее время выводимый файл .js выглядит следующим образом:

 define(["require", "exports", "jquery"], function(require, exports, $) {...
  

Когда мне нужно, чтобы он выдавал:

 define("MODULE_NAME" ["require", "exports", "jquery"], function(require, exports, $) {...
  

Возможно ли это с помощью Typescript или мне следует подумать о замене пакета для минимизации на Require.js собственная оптимизация?

Ответ №1:

Если вы используете ASP.NET и интегрированного пакета скриптов, вы правы: проблема в том, что пакет содержит несколько анонимных модулей. Хотя работать с анонимными модулями — хорошая, обычная практика (и пусть какой-нибудь компрессор / оптимизатор сделает именование позже), это не сработает для ASP.NET объединение, поскольку оно объединяет только входные файлы JS. Решение состоит в том, чтобы заставить TypeScript создавать именованные модули. И это возможно с помощью TS, поэтому ответ на ваш вопрос

Возможно ли это с помощью Typescript

определенно: Да!

В TypeScript 1.4 добавлена возможность передавать компилятору именованные модули от AMD, например:

 ///<amd-module name='NamedModule'/>
export class C {
}
  

Ответ №2:

Проблема не в генерации кода (что правильно). Проблема в том, что у вас, вероятно, есть тег script, загружающий этот файл JavaScript. Оно должно загружаться только RequireJS, с использованием data-main или как зависимость от другого модуля.

Смотрите: http://requirejs.org/docs/errors.html#mismatch

Удалите тег script