Bundler с использованием TypeScript - PullRequest
3 голосов
/ 20 мая 2019

API TypeScript выставлен customTransformer API несколько версий назад.

Я хочу создать преобразователь, который обрабатывает операторы импорта (и, возможно, требует тоже) для разрешения зависимостей пакета, например webpack , browserify или parcel do.

К счастью, сам TypeScript уже использует API customTransformer для очень похожих целей:

transformAMDModule в строке src / compiler / transformers / module / module.ts 120

Однако этот код опирается на многие внутренние поля / API (и не совсем выполняет то, что здесь необходимо).

Можно ли выполнить эту задачу в общедоступном API? Даже если упрощенная / частичная версия.


ДЛЯ УТОЧНЕНИЯ: речь идет о связывании внешних зависимостей приложения (таких как react, moment, lodash) и кода приложения вместе в большой кусок JS. Хотя TypeScript в настоящее время поддерживает аргумент --outFile, который собирает только код приложения, не зависимостей.

P.S. Задавая тот же вопрос через Twitter / 486timetable , и будет отображать любые полезные обновления здесь для поиска.

1 Ответ

0 голосов
/ 05 июня 2019

Официального ответа нет, но вот мое собственное исследование на GitHub:

  1. Вы не можете достичь этого ТОЛЬКО с помощью пользовательских трансформаторов.Нужно проделать большую работу заранее, до фазы излучения / преобразования.
  2. Первый этап - сбор зависимостей модуля.Вот что findDependencies делает здесь: отбирает ts.Program и ts.TypeChecker объекты и извлекает шаблоны из AST.В идеале он должен перехватывать:
    • import ... from "a-module" операторы
    • require("a-module") синхронизация вызовов
    • import("a-module") асинхронные вызовы
    • AMD define синтаксис
    • AMD require асинхронные вызовы (поведение отличается от глобальной синхронизации require)
    • возможно - перенаправление включенных глобальных параметров, таких как React -> import React from "react"
    • старый синтаксис TypeScript import операторы
  3. Внешние зависимости - связка (рекурсивно).
  4. Наконец, отключите зависимости emit и handle / alias:
    • просто разрешить локально, если внутренний код
    • добавить внешние предварительно связанные

Не совсем просто, но реально выполнимо.Надеюсь, кто-нибудь из команды #TypeScript сможет исправить любые ошибки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...