#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