Typescript зачем и когда требуется requirejs

Это более общий вопрос о том, почему и когда requirejs требуется с Typescript. Я выполнил некоторую работу с requireJs раньше и всегда использовал r.js build script перед развертыванием. Насколько я понимаю, сборка script, которая объединяет все js файлы (модули), заключается в том, чтобы уменьшить количество запросов HTTP и, конечно же, предоставить способ модуляции вашего кода.

Мой вопрос таков: Поскольку typescript уже предоставляет простой способ разделения кода на модули, почему бы просто не объединить результирующие js файлы вместо дополнительного шага использования requirejs для обработки модулей? Если я работаю над более крупными проектами, я понимаю, что все js не должны загружаться одновременно, но я предполагаю, что они все равно будут связывать модули.

Изменить: Чтобы быть более конкретным: Зачем использовать requireJs для управления моими модулями, а не просто придерживаться typescript внутренних модулей, которые, как я понял, также могут быть загружены во время выполнения. Внутренние модули против внешних модулей на основе amd и requirejs.

Ответы

Ответ 1

Единственная причина, по которой вы захотите использовать RequireJS для запуска вашей программы TypeScript в браузере, будет, если у вас есть сотни модулей, но для выполнения своих действий на странице может потребоваться только два или три. Здесь мы говорим о серьезных больших программах, а не о бесплатных приложениях или дополнительных фанковых материалах для веб-страницы.

Использование RequireJS для действительно большого приложения означает, что вы загружаете только нужные вам сценарии - не все на всякий случай.

Для примера предположим, что вы написали Microsoft Office как программу TypeScript, вы можете использовать RequireJS для загрузки всего необходимого вам материала по мере необходимости. Итак, сначала вы загрузите то, что вам нужно для изучения файлов, а затем, когда выбран файл, это приведет к загрузке модуля (возможно, Word) с его зависимостями. Это может означать, что вы загрузили только 10% программы в несколько небольших кусков.

Модульные погрузчики

TypeScript не имеет собственного загрузчика модуля. Он компилирует TypeScript в JavaScript, преобразуя ваши операторы импорта модуля в код кода CommonJS или AMD. Определение асинхронного модуля (AMD) - это формат модуля, используемый RequireJS. Модули CommonJS используются NodeJS. Вы должны опираться на эти загрузчики модулей, используете ли вы TypeScript или JavaScript.

TypeScript просто преобразует это:

import myModule = module('mymodule');

В операторы require или define в соответствии с разделом 10.4 TypeScript Спецификация языка.

Ответ 2

Если вы загружаете только один JS файл во время pageload, вам не потребуется requireJS.
Вам нужно requireJS, если у вас несколько js файлов, и если вы хотите, чтобы они загружались не в index.html, но во время выполнения вашего script. Они будут загружены асинхронно и только один раз. Код после запроса script выполняется только после загрузки требуемого script. Это может быть особенно полезно для ленивой загрузки, когда вы не уверены, что пользователь будет вообще нужен всем пользователям.
Другим преимуществом является то, что зависимость модуля определяется в каждом модуле, так как каждый модуль, который нуждается в другом модуле для работы, может затем включать соответствующие "require" -Statements.

Ответ 3

В описанном вами случае использования вам не нужно requireJS, так как вам не нужно вручную объединять полученные js файлы. Компилятор typescript может сделать это для вас. Вы можете указать опцию --out file.js для команды tsc. Это скомпилирует все .ts файлы и сгенерирует один выходной файл JavaScript. Это позволяет разделить ваш код на модули в отдельных файлах .ts с помощью ключевого слова typescript module и объединить их для оптимизации развертывания.

Вы можете изменить формат модуля того, что экспортируется из typescript в AMD. Для загрузки этих модулей потребуется RequireJS. Также есть плагины для RequireJS, которые делают дополнительный материал за пределами модулей загрузки, например. асинхронная загрузка текстовых файлов