Перенесите все файлы TypeScript в относительный соседний каталог.

Я пишу наши тесты на основе JavaScript с помощью TypeScript.

Я хотел бы, чтобы одна команда tsc --watch могла правильно обрабатывать транспиляцию всех наших файлов, это ключевая часть. Я думаю, что здесь можно использовать несколько файлов tsconfig.json.

У меня есть эта структура:

/tests
  /e2e
     tsconfig.json
    /src
    /target
  /unit
     tsconfig.json
    /src
    /target

Я хочу поместить файлы TypeScript в каталоги src и транспилировать их в целевые каталоги.

Мой вопрос: если у вас есть сценарий bash, который может принимать список файлов в качестве входных данных, как вы можете перенести файлы в соответствующий целевой каталог?

например, входные файлы:

/home/you/projects/x/test/e2e/src/a.ts
/home/you/projects/x/test/e2e/src/b.ts
/home/you/projects/x/test/e2e/src/c.ts
/home/you/projects/x/test/unit/src/foo.ts
/home/you/projects/x/test/unit/src/bar.ts
/home/you/projects/x/test/unit/src/baz.ts

желаемые выходные файлы:

/home/you/projects/x/test/e2e/target/a.js
/home/you/projects/x/test/e2e/target/b.js
/home/you/projects/x/test/e2e/target/c.js
/home/you/projects/x/test/unit/target/foo.js
/home/you/projects/x/test/unit/target/bar.js
/home/you/projects/x/test/unit/target/baz.js

Есть ли способ для команды tsc взять эти файлы и перенести их все в одну команду в одну строку в соответствующие целевые каталоги?

Я предполагаю, что это может быть очень сложно сделать. Возможно, мне придется сгруппировать их по имени каталога и перенести каждую группу отдельно. Это было бы намного сложнее.


person Alexander Mills    schedule 17.06.2017    source источник
comment
Как вы их транспилируете?   -  person 123    schedule 17.06.2017
comment
есть параметр target dir для tsc, который просто делает это, вы можете установить его в tsconfig.json :-/   -  person toskv    schedule 17.06.2017
comment
outDir в tsconfig.json - это то, что вы ищете   -  person harishr    schedule 17.06.2017
comment
народ, должно быть два разных аутДира, читайте вопрос внимательно   -  person Alexander Mills    schedule 17.06.2017
comment
Как я их транспилирую? вот в чем вопрос. У меня есть исходники, и я хочу перенести все файлы с помощью одной команды tsc, но я не знаю, как это сделать.   -  person Alexander Mills    schedule 17.06.2017
comment
x/src/a.ts -> x/target/a.js и y/src/b.ts -> y/target/b.js, это то, что я пытаюсь сделать с помощью tsc, в идеале одной командой.   -  person Alexander Mills    schedule 17.06.2017
comment
что вы можете сделать, так это создать 2 проекта с разными конфигурациями (проще, если вы используете gulp/grunt) и использовать параметр компилятора include для включения разных файлов.   -  person toskv    schedule 17.06.2017
comment
Хорошо, это имеет смысл, поэтому, вероятно, придется поместить разные файлы tsconfig.json в каждый отдельный каталог. У меня есть более двух каталогов src, их несколько. Я просто использовал два для краткости.   -  person Alexander Mills    schedule 18.06.2017
comment
Сначала я удалил вопрос, но потом понял, что хочу, чтобы одна команда tsc --watch могла правильно обрабатывать транспиляцию всех файлов. Поэтому я только что обновил вопрос. Я думаю, что использование нескольких файлов tsconfig.json в каждом подкаталоге — лучшее решение. Но пока не уверен на 100%.   -  person Alexander Mills    schedule 18.06.2017
comment
Итак, после некоторого расследования запуск tsc -w из корня проекта с несколькими файлами tsconfig.json в разных подкаталогах - похоже, что tsc -w просто берет файл tsconfig.json в корне проекта и применяет его только . Сообщит о проблеме с TS на Github.   -  person Alexander Mills    schedule 18.06.2017
comment
github.com/Microsoft/TypeScript/issues/16604   -  person Alexander Mills    schedule 18.06.2017
comment
почему бы просто не запустить двух наблюдателей? вы можете сделать его одним вкладышем с помощью обычного bash '&'.   -  person Catalyst    schedule 18.06.2017
comment
да, это то, что я сделал, я запускаю наблюдатель для каждого отдельного файла tsconfig.js. github.com/ORESoftware/tsc-multi-watch   -  person Alexander Mills    schedule 18.06.2017


Ответы (2)


Я не думаю, что вы можете заставить родной tsc --watch поддерживать эту структуру проекта, но вы можете использовать gulp и gulp-typescript. Они позволяют настроить одновременные наблюдения за несколькими разными проектами TypeScript, каждый со своим собственным tsconfig.json.

Если между этими подкаталогами есть зависимости, рассмотрите возможность использования также lerna. В противном случае вы можете получить неожиданный макет в ваших целевых каталогах. Дополнительный уровень каталогов был начальной проблемой, которая заставила меня заняться этим. С помощью lerna вы создадите отдельные файлы package.json, которые документируют зависимости. Затем lerna bootstrap может позаботиться о настройке символических ссылок для разрешения ссылок.

С помощью lerna вы можете пометить некоторые файлы package.json как "private": true, если они не предназначены для публикации в npm.

person Burt_Harris    schedule 18.06.2017
comment
Спасибо, я, вероятно, в конечном итоге напишу что-то, что в основном порождает tsc -w для каждого файла tsconfig.json. - person Alexander Mills; 18.06.2017

Я создал инструмент для этого:

github.com/ORESoftware/tsc-multi-watch

Он будет искать в вашем проекте файлы /tsconfig.*\.json/ и запускать процесс tsc -w для каждого из них.

Мало того, это решает еще один недостаток tsc --watch. tsc --watch не может учитывать новые файлы, добавляемые в проект.

tsc-multi-watch перезапустит правильный процесс tsc -w при добавлении в проект файла .ts.

person Alexander Mills    schedule 22.06.2017
comment
Выглядит хорошо, но это все еще мелочь. tsc не поддерживает это изначально, потому что любое решение, порождающее отдельные процессы tsc, будет плохо масштабироваться в крупномасштабном проекте, накладывая нагрузку на ЦП и память. - person loopmode; 14.05.2019
comment
да, все еще * жаль.. Я согласен, это не лучшее решение, но я думаю, что несколько процессов tsc, каждый из которых просматривает 8 файлов, не намного хуже, чем 1 процесс tsc, просматривающий 64 файла и т. д. Они в основном простаивают. - person Alexander Mills; 14.05.2019