Первое и основное заблуждение — искать прямую замену самому языку TypeScript. Это язык с открытой спецификацией. Проблема не в нем, а в зависимостях и инфраструктуре. Поэтому стратегия импортозамещения должна быть многоуровневой.
Уровень 1: Компилятор и инструменты. Официальный компилятор tsc написан на TypeScript и распространяется через npm. В случае проблем с доступом к npm-реестру его можно собрать из исходников. Более надежный путь — использование альтернативных компиляторов, совместимых с TypeScript. Лидер здесь — проект SWC (Speedy Web Compiler), написанный на Rust. Он в разы быстрее tsc и может использоваться для трансляции TS/JS. Для проверки типов можно использовать либо tsc (только для этой задачи), либо встроенные в SWC плагины. Другой вариант — Babel с плагином `@babel/preset-typescript` (транспиляция без проверки типов). Российские команды могут создать собственные сборки или форки этих инструментов, обеспечив их доступность через внутренние реестры.
Уровень 2: Пакетный менеджер и реестр. Зависимость от npmjs.org — ключевое уязвимое место. Решение — развертывание и поддержка приватного прокси-реестра. Лидеры рынка — Verdaccio (опенсорс) и коммерческие решения вроде JFrog Artifactory. Компания должна настроить такой реестр, закэшировать в нем все критические зависимости (включая `@types/*`) и настроить CI/CD и рабочие станции разработчиков на работу исключительно через него. Это не только решает проблему доступности, но и повышает безопасность и скорость сборки.
Уровень 3: Сервер языка (LSP) и IDE. Интеллектуальные подсказки, навигация и рефакторинг в VSCode, WebStorm и других IDE обеспечиваются сервером языка tsserver. Его работа зависит от доступа к `node_modules` и типам. Настройка локального реестра решает эту проблему. В качестве IDE можно рассматривать российские разработки, такие как «Ручь» (от «Ред Софт») или PascalABC.NET, но их поддержка TypeScript может быть ограничена. Практичный путь — использование нейтральных редакторов (Neovim, Sublime Text) с LSP-клиентом и настройкой на альтернативный сервер языка (например, `typescript-language-server`), который также работает с локальным реестром.
Уровень 4: Среда выполнения — Node.js и браузеры. TypeScript компилируется в JavaScript, который выполняется в Node.js или браузере. Здесь стратегия импортозамещения смещается в плоскость замещения этих сред. Для серверной части можно рассматривать российские сборки Node.js (например, от «Ред Софт» или «Postgres Professional») или, в перспективе, переход на российские платформы, такие как «Платформа ОС» с ее средой выполнения. Для браузерной части важно тестирование на отечественных браузерах (например, «Спутник»).
Практическое руководство по миграции на «суверенный стек»:
- Аудит: зафиксируйте все зависимости (`package-lock.json`), версии TypeScript, Node.js и инструментов.
- Разверните приватный npm-реестр (Verdaccio) и загрузите в него все необходимые пакеты.
- Переведите проекты на использование локального реестра. Обновите `.npmrc` в проектах и CI.
- Протестируйте сборку с использованием SWC или собранного из исходников tsc.
- Настройте LSP-сервер в IDE разработчиков для работы с локальными пакетами.
- Документируйте процесс и создайте скрипты для быстрого развертывания среды новых разработчиков.
- Минимизируйте зависимости. Каждый внешний пакет — потенциальный риск.
- Используйте строгие настройки `tsconfig.json` (`strict: true`). Это снижает количество runtime-ошибок и зависимость от деталей реализации.
- Внедрите статический анализ (ESLint, SonarQube) для контроля качества кода независимо от экосистемы.
- Рассмотрите использование Deno (альтернатива Node.js со встроенной поддержкой TypeScript и безопасной моделью разрешений) как потенциально более контролируемую среду.
Комментарии (14)