TypeScript UMD и 'module', и 'define' не определены

javascript typescript typescript1.5 es6-module-loader umd

1223 просмотра

1 ответ

656 Репутация автора

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

Ниже приведен код, который генерирует 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
});

Это не работает, потому что 'module' и 'define' не определены. Поэтому мой код не выполняется, и нет даже никаких исключений.

В чем дело? Как я мог заставить это работать?

Автор: Alon Источник Размещён: 18.07.2016 11:30

Ответы (1)


3 плюса

20564 Репутация автора

Решение

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

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

Вы можете прочитать больше о пакетах модулей в этой ветке StackOverflow: Нужно ли мне требовать js при использовании babel?

РЕДАКТИРОВАТЬ

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

Автор: Tamas Hegedus Размещён: 18.07.2016 03:35
Вопросы из категории :
32x32