2016-07-12 4 views
1

Сначала: я знаю разницу между tsc и tsc -w в командной строке. Это не проблема, это довольно сложная ситуация:TypScript TSC CommandLine - предотвращение просмотра TSC

В tsconfig в коде VS я включил наблюдателя, установив "watch":true. Это абсолютно необходимо. Но теперь проблема:

У меня есть некоторые скрипты, которые должны установить всю среду проекта VS Code (так что сам конкретный проект) и хотите, чтобы проект изначально был скомпилирован tsc. Но теперь он компилирует его в режиме просмотра, так как tsconfig говорит об этом. Могу ли я сделать исключение здесь? При первоначальной компиляции в bat-файле я хочу, чтобы tsc автоматически не устанавливал параметр watch в true, а компилировал его во время игры, если параметр просмотра в tsconfig включен или выключен.

Есть ли способ достичь этого?

Спасибо!

+0

, пожалуйста, какая разница между tsc и tsc -w? – stackdave

+0

-w - параметр, стоящий для «watch», что означает, что компилятор tsc будет оставаться открытым после компилятора вашего кода и всякий раз, когда изменяется ts-файл внутри вашего проекта, компилятор автоматически перекомпилирует файлы проекта, чтобы ваш проект обновлен. Надеюсь, это поможет! – jlang

+0

спасибо @jlang, но вы знаете, почему в новом учебнике angular2 скрипт запускается дважды tsc: tsc и tsc -w, когда я активно регистрирую, они компилируются дважды; я не нахожу отправки: «start»: «tsc && одновременно» npm run tsc: w \ "\" npm run lite \ "", посмотрите https://angular.io/docs/ts/latest/quickstart.html – stackdave

ответ

0

я, наконец, решил ее просто с помощью команды переименования окон:

rem Rename the tsconfig to prevent the tsc-task from watching 
rename "tsconfig.json" "temp-hide.json" 
rename "setup-config.json" "tsconfig.json" 
tsc 
rem Undo renaming since the task finished 
rename "tsconfig.json" "setup-config.json" 
rename "temp-hide.json" "tsconfig.json" 

В моем процессе установки я переименовал tsconfig.json на темп-hide.json (поскольку TSconfig содержит опции часы) , а затем переименовали setup-config.json в tsconfig.json, чтобы вместо этого использовался этот файл .

Когда все файлы были переименованы, я, наконец, выполнил команду tsc и после выполнения этой команды, я переименую все обратно в свои исходные имена файлов .

0

Вы можете сделать лучше, чем решение для переименования. Прямо сейчас проблема заключается в том, что при вызове tsc флаг (--watch) переопределяется значением compilerOptions.watch, указанным в вашем tsconfig.json (находится в том же каталоге, в котором вызывается скрипт tsc). Мы будем использовать функцию, введенную в TypeScript 2.1: configuration inheritance.

Базовая конфигурация, tsconfig.json (разовый режим)

Напишите все, что типичное поведение должно быть здесь. Это будет наш базовый файл (default) tsconfig.

{ 
    "compilerOptions": { 
    "watch": false, 
    "module": "commonjs", 
    "target": "es6", 
    "sourceMap": true, 
    "inlineSources": true, 
    "strictNullChecks": true 
    } 
} 

Расширение конфигурации tsconfig_w.json (режим часов)

Теперь мы пишем расширение для него, в котором одно свойство изменения: compilerOptions.watch переопределяется в true.

{ 
    "extends": "./tsconfig.json", 
    "compilerOptions": { 
     "watch": true 
    } 
} 

командной строки вызов tsc

Раньше вы были вызовом tsc без предоставления каких-либо дополнительных аргументов. Теперь вы должны указать явно, с какого из tsconfig он должен читать.

  • Разовые: tsc --project tsconfig.json (это файл по умолчанию он будет использовать, но давайте быть явным).

  • Часы: tsc --project tsconfig_w.json

Примечание: --project флаг был введен в TypeScript 1.8.

Дополнительное для удобства: package.json

Я обычно пишу их как удобные скрипты в моей package.json:

"scripts": { 
    "lib": "./node_modules/.bin/tsc --project tsconfig.json", 
    "libw": "./node_modules/.bin/tsc --project tsconfig_w.json" 
} 

Вы бы тогда просто запустить npm run lib или npm run libw в зависимости от того, какой скрипт вам нужно.

Примечание: Я указал путь к TypeScript локально, а не глобально (поскольку я его не установил глобально).