1

Я передаю свой TypeScript с помощью «-m umd», потому что мой проект включает в себя сервер, клиент и общий код. Однако клиентский код не работает в браузере. В браузере даже не отображается какая-либо ошибка, и точка останова, на которую я не попал, не удалась, поэтому мне пришлось удалить js-ts mapping. Затем я смог отладить его, и я нашел проблему.TypeScript UMD как «module», так и «define» не определены

Ниже приведен код, который генерирует UMD:

(function (factory) { 
    if (typeof module === 'object' && typeof module.exports === 'object') { 
     var v = factory(require, exports); if (v !== undefined) module.exports = v; 
    } 
    else if (typeof define === 'function' && define.amd) { 
     define(["require", "exports", "./model"], factory); 
    } 
})(function (require, exports) { 
    //my code 
}); 

Это не работает, потому как «модуль» и «определение» не определены. Поэтому мой код не выполняется и исключений не существует.

Что случилось? Как я могу заставить его работать?

+2

Вы должны использовать загрузчик модуля. –

+0

@Tamas Hegedus как SystemJS? Поэтому мне не нужно использовать UMD в этом случае. Я думал, что UMD должен решить мне эту проблему. – Alon

+1

UMD объединяет модули AMD и CommonJS, поэтому вы также можете использовать эти модули. SystemJS также объединяет AMD и CommonJS, поэтому он может загружаться. Единственный ясный способ решить проблему - использовать чистые модули es6 и пакет с rollupjs. Я не знаю, имеет ли набор машинописных описаний встроенный набор, построенный в –

ответ

3

Сегодня ни один из браузеров не понимает модули AMD. (Фактически ни один из форматов модуля, кроме стандартного ES6, в некоторых действительно новых сборках MS Edge).

Так что вам нужно связать загрузчик модуля с кодом. Я предлагаю вам либо использовать только модули AMD, и легкий загрузчик AMD, объединяя ваши модули и загрузчик модулей в одном файле, либо используя RollupJS, который генерирует пакет без загрузки без использования стандартных модулей ES6. Если я правильно помню, плагин rollup-plugin-typescript плохо работает с несколькими файлами, поэтому я рекомендую скомпилировать машинописный текст с помощью tsc в модулях es6 и связать его с rollupjs на втором этапе.

Вы можете прочитать больше о модуле Упаковщики в этой StackOverflow теме: Do I need require js when I use babel?

EDIT

Сегодня (сентябрь 2016) rollup-plugin-typescript плагин работает как шарм! Определенно, это рекомендуемый способ.