outFile caution
Це погана ідея для вас через такі причини:
Помилки виконання
Швидка компіляція
Глобальний масштаб
Важко аналізувати
Важко масштабувати
_references
Повторне використання коду
Кілька цілей
Ізольована компіляція
Runtime Errors
Якщо ваш код залежить від будь-якої форми впорядкування js, ви отримаєте випадкові помилки під час виконання.
успадкування класу може бути порушено під час виконання.
Розглянемо foo.ts
:
and a bar.ts
:
Якщо вам не вдається скомпілювати його в правильному порядку, Напр. можливо, за алфавітом tsc bar.ts foo.ts
код компілюватиметься добре, але під час виконання виникне помилка з ReferenceError
.
розбиття модулів може виникнути збій під час виконання.
Розглянемо foo.ts
:
And bar.ts
:
Якщо вам не вдається скомпілювати його в правильному порядку, напр. можливо, в алфавітному порядку tsc bar.ts foo.ts
код скомпілюється добре, але мовчки зазнає помилки під час виконання з bar
встановленим на NaN
.
Fast compile
Якщо ви використовуєте --out
, то окремі файли .ts
не можна кодувати в окремі файли .js
без непотрібних хаків. --out
по суті змушує повільніше поступове збирання.
Крім того, source maps є позиційно чутливими та закодовані за довжиною циклу, тому більшу частину карти потрібно перекомпілювати заново, якщо ви використовуєте source maps (що ви повинні!). При високих показниках від 10 до 100 секунд він буде повільним.
Global Scope
Звісно, ви можете використовувати простори імен, але він все ще знаходиться у window
, якщо ви запускаєте його у браузері. Простори імен — це лише непотрібний обхідний шлях. Крім того, коментарі /// <reference
вводять глобальний контекст у ваш код, який може бути важко підтримувати.
Крім того, якщо у вашій компанії є кілька команд, які працюють незалежно, а потім хтось вирішує спробувати інтегрувати дві незалежно написані програми, висока ймовірність конфлікту імен.
Hard to analyze
Ми хочемо надати більше інструментів аналізу коду. Це буде легше, якщо ви надасте нам ланцюжок залежностей (неявно на срібному блюді за допомогою зовнішніх модулів).
Крім того, не тільки dev tools допомогають зрозуміти код. Колт людині потрібно зрозуміти багато кодової бази, перш ніж вони почнуть розуміти, звідки імпортуються речі. Використання внутрішніх модулів також ускладнює перегляд окремого коду, наприклад, на github.
Hard to scale
Насправді просто результат випадкових помилок виконання + все повільніший час компіляції + труднощі з розумінням чужого коду.
_references.ts
_references.ts
Не підтримується tsconfig.json
: https://github.com/Microsoft/TypeScript/issues/2472#issuecomment-85330803 Вам доведеться вручну сортувати масив files
.
Code reuse
Якщо ви хочете повторно використати частину свого коду в іншому проекті з усім цим неявним керуванням залежностями, буде важко перенести його без потенційних помилок виконання.
Multiple Targets
Крім того, якщо ви вирішите повторно використовувати свій код браузера в чомусь на кшталт nodejs (наприклад, для тестування API), вам потрібно буде перенести його на модульну систему або придумати потворні хаки, щоб зробити nodejs global
вашим новим глобальним scope (тобто window
).
Isolated Compile
Файли не можуть бути скомпільовані окремо. Наприклад розглянути a.ts
:
Матиме різний вихід залежно від того, чи існує b.ts
форми:
or
Отже, a.ts
не можна скомпілювати ізольовано.
Summary
--out
насправді є завданням якогось інструменту для збирання. І навіть такий інструмент збирання може отримати користь від згадок про залежності, наданих зовнішніми модулями. Тому ми рекомендуємо вам використовувати зовнішні модулі, а потім дозволити інструменту збірки створити для вас єдиний .js
, якщо ви цього бажаєте.
https://twitter.com/nycdotnet/status/613705850574778368
Last updated