Опции компилятора Typescript - попытка получить "плоский" вывод в outDir - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть каталог src с моим исходным кодом и модульными тестами, а также каталог test, содержащий отдельный тест скорости.

Когда я строю свой проект с tsc, я получаю каталогструктура, подобная этой:

dist/
  src/
    index.js
    ...
  test/
    speed-test.js

Я бы предпочел, однако, чтобы получить "плоский" вывод в мой каталог dist, например:

dist/
  index.js
  ...
  speed-test.js
  ...

Если я удаляю speed-test.ts из каталога test, tsc не добавляет каталог src в dist. Дополнительная структура каталогов добавляется только тогда, когда есть необходимость (или, по крайней мере, когда tsc решает, что есть необходимость) выделить источники скомпилированного кода.

Я уверен, что иногда это очень полезно дляизбегайте конфликтов имен файлов, но это не важно для меня в этом случае, и я бы предпочел не получать эту дополнительную «помощь».

Вот мой tsconfig.json:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs",
    "outDir": "./dist",
    "noImplicitAny": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noImplicitReturns": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "resolveJsonModule": true,
    "allowSyntheticDefaultImports": true
  }
}

Я попытался добавить "rootDirs" опции ["src", "test"], но это не помогло.

Есть ли у меня способ получить структуру вывода, которую я ищу?

1 Ответ

1 голос
/ 30 сентября 2019

Если вы хотите опустить дополнительные папки src и test в dist, вы должны указать tsc, что он должен компилировать файлы только в src с указанным tsconfig.json,

По умолчанию компилятор включает все файлы в рабочей области проекта, поэтому ему требуется дополнительная структура папок, чтобы отличить src от test. По этой же причине в dist не создается папка src, когда удаляется speed-test.ts - все файлы находятся в src, поэтому компилятор выбирает этот каталог в качестве корневого. Вы можете ограничить компиляцию src только с помощью опции компилятора include/exclude/files следующим образом:

{
    "compilerOptions": {
      ...
    },
    "include": [
        "src/**/*"
    ]
}

С помощью rootDir вы можете дополнительно принудительно установить, что родительский элементкаталог для вашего вывода в dist всегда будет src, даже если вы случайно import что-то извне src в одном из ваших модулей случайно (если не указано, rootDir автоматически рассчитывается как родительский каталогвсе входы). В этом случае tsc прервет компиляцию, поскольку rootDir больше не является корнем всех входных файлов.

{
  "compilerOptions": {
    "rootDir": "src",
    ...
  }
}

Для ваших тестовых файлов вы можете выполнить отдельный шаг компиляции с другой конфигурацией, напримерtsconfig.test.json (или через tsc CLI). Например, с jest, здесь - пример с пользовательским файлом конфигурации. Или вы можете просто использовать tsc CLI для компиляции speed-test.ts, а затем использовать выбранный инструмент тестирования (не уверен, что это для вас).

Надеюсь, это поможет!

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