Я пытаюсь преобразовать домашний проект в TypeScript и, похоже, не могу использовать эту tsc
утилиту для просмотра и компиляции моих файлов. В справке говорится, что я должен использовать -w
переключатель, но похоже, что он не может *.ts
рекурсивно просматривать и компилировать все файлы в некотором каталоге. Кажется, что-то tsc
должно уметь справляться. Какие у меня варианты?
84
tsc
выдавало ошибку,error TS6050: Unable to open file 'tsconfig.json'.
пока я не удалил комментарииcompilerOptions.rootDir
, вы можете указать несколько исходных каталогов с помощьюinclude
свойства tsconfig :{ "compilerOptions": { ...myOptions }, "include": [ "src", "otherSrc" ] }
В бета-версии TypeScript 1.5 появилась поддержка файла конфигурации tsconfig.json. В этом файле вы можете настроить компилятор, определить правила форматирования кода и, что более важно для вас, предоставить ему информацию о файлах TS в вашем проекте.
После правильной настройки вы можете просто запустить команду tsc и заставить ее скомпилировать весь код TypeScript в вашем проекте.
Если вы хотите, чтобы он следил за файлами на предмет изменений, вы можете просто добавить --watch к команде tsc.
Вот пример файла tsconfig.json
{ "compilerOptions": { "target": "es5", "module": "commonjs", "declaration": false, "noImplicitAny": false, "removeComments": true, "noLib": false }, "include": [ "**/*" ], "exclude": [ "node_modules", "**/*.spec.ts" ]}
В приведенном выше примере я включаю все файлы .ts в свой проект (рекурсивно). Обратите внимание, что вы также можете исключить файлы, используя свойство «exclude» с массивом.
Дополнительную информацию см. В документации: http://www.typescriptlang.org/docs/handbook/tsconfig-json.html.
источник
вы можете смотреть все такие файлы
источник
С технической точки зрения у вас есть несколько вариантов:
Если вы используете IDE, например Sublime Text, и интегрированный плагин MSN для Typescript: http://blogs.msdn.com/b/interoperability/archive/2012/10/01/sublime-text-vi-emacs-typescript-enabled. aspx вы можете создать систему сборки, которая автоматически компилирует
.ts
исходный код.js
. Вот объяснение, как это сделать: Как настроить Sublime Build System для TypeScript .Вы можете определить даже компиляцию исходного кода в
.js
файл назначения при сохранении файла. На github есть возвышенный пакет: https://github.com/alexnj/SublimeOnSaveBuild, который делает это возможным, только вам нужно включитьts
расширение вSublimeOnSaveBuild.sublime-settings
файл.Другой вариант - скомпилировать каждый файл в командной строке. Вы можете собрать даже несколько файлов одновременно, разделяя их пробелами нравится так:
tsc foo.ts bar.ts
. Проверьте эту ветку: Как передать компилятору TypeScript несколько исходных файлов? , но я думаю, что первый вариант более удобен.источник
Компилятор tsc будет отслеживать только те файлы, которые вы передаете в командной строке. Он не будет смотреть файлы, включенные по
/// <sourcefile>
ссылке. Если вы работаете с bash, вы можете использовать find для рекурсивного поиска всех*.ts
файлов и их компиляции:find . -name "*.ts" | xargs tsc -w
источник
Изучите использование grunt для автоматизации этого, существует множество руководств, но вот быстрое начало.
Для такой структуры папок:
Вы можете легко смотреть и работать с машинописным текстом из папки примеров с помощью:
С package.json:
{ "name": "PROJECT", "version": "0.0.1", "author": "", "description": "", "homepage": "", "private": true, "devDependencies": { "typescript": "~0.9.5", "connect": "~2.12.0", "grunt-ts": "~1.6.4", "grunt-contrib-watch": "~0.5.3", "grunt-contrib-connect": "~0.6.0", "grunt-open": "~0.2.3" } }
И файл ворчания:
module.exports = function (grunt) { // Import dependencies grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-connect'); grunt.loadNpmTasks('grunt-open'); grunt.loadNpmTasks('grunt-ts'); grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), connect: { server: { // <--- Run a local server on :8089 options: { port: 8089, base: './' } } }, ts: { lib: { // <-- compile all the files in ../ to PROJECT.js src: ['../*.ts'], out: 'PROJECT.js', options: { target: 'es3', sourceMaps: false, declaration: true, removeComments: false } }, example: { // <--- compile all the files in . to example.js src: ['*.ts'], out: 'example.js', options: { target: 'es3', sourceMaps: false, declaration: false, removeComments: false } } }, watch: { lib: { // <-- Watch for changes on the library and rebuild both files: '../*.ts', tasks: ['ts:lib', 'ts:example'] }, example: { // <--- Watch for change on example and rebuild files: ['*.ts', '!*.d.ts'], tasks: ['ts:example'] } }, open: { // <--- Launch index.html in browser when you run grunt dev: { path: 'http://localhost:8089/index.html' } } }); // Register the default tasks to run when you run grunt grunt.registerTask('default', ['ts', 'connect', 'open', 'watch']); }
источник
tsc 0.9.1.1, похоже, не имеет функции просмотра .
Вы можете использовать сценарий PowerShell, например:
#watch a directory, for changes to TypeScript files. # #when a file changes, then re-compile it. $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = "V:\src\MyProject" $watcher.IncludeSubdirectories = $true $watcher.EnableRaisingEvents = $true $changed = Register-ObjectEvent $watcher "Changed" -Action { if ($($eventArgs.FullPath).EndsWith(".ts")) { $command = '"c:\Program Files (x86)\Microsoft SDKs\TypeScript\tsc.exe" "$($eventArgs.FullPath)"' write-host '>>> Recompiling file ' $($eventArgs.FullPath) iex "& $command" } } write-host 'changed.Id:' $changed.Id #to stop the watcher, then close the PowerShell window, OR run this command: # Unregister-Event < change Id >
Ссылка: автоматический просмотр и компиляция файлов TypeScript .
источник
Сегодня я разработал этот Ant MacroDef для решения той же проблемы, что и ваша:
<!-- Recursively read a source directory for TypeScript files, generate a compile list in the format needed by the TypeScript compiler adding every parameters it take. --> <macrodef name="TypeScriptCompileDir"> <!-- required attribute --> <attribute name="src" /> <!-- optional attributes --> <attribute name="out" default="" /> <attribute name="module" default="" /> <attribute name="comments" default="" /> <attribute name="declarations" default="" /> <attribute name="nolib" default="" /> <attribute name="target" default="" /> <sequential> <!-- local properties --> <local name="out.arg"/> <local name="module.arg"/> <local name="comments.arg"/> <local name="declarations.arg"/> <local name="nolib.arg"/> <local name="target.arg"/> <local name="typescript.file.list"/> <local name="tsc.compile.file"/> <property name="tsc.compile.file" value="@{src}compile.list" /> <!-- Optional arguments are not written to compile file when attributes not set --> <condition property="out.arg" value="" else='--out "@{out}"'> <equals arg1="@{out}" arg2="" /> </condition> <condition property="module.arg" value="" else="--module @{module}"> <equals arg1="@{module}" arg2="" /> </condition> <condition property="comments.arg" value="" else="--comments"> <equals arg1="@{comments}" arg2="" /> </condition> <condition property="declarations.arg" value="" else="--declarations"> <equals arg1="@{declarations}" arg2="" /> </condition> <condition property="nolib.arg" value="" else="--nolib"> <equals arg1="@{nolib}" arg2="" /> </condition> <!-- Could have been defaulted to ES3 but let the compiler uses its own default is quite better --> <condition property="target.arg" value="" else="--target @{target}"> <equals arg1="@{target}" arg2="" /> </condition> <!-- Recursively read TypeScript source directory and generate a compile list --> <pathconvert property="typescript.file.list" dirsep="\" pathsep="${line.separator}"> <fileset dir="@{src}"> <include name="**/*.ts" /> </fileset> <!-- In case regexp doesn't work on your computer, comment <mapper /> and uncomment <regexpmapper /> --> <mapper type="regexp" from="^(.*)$" to='"\1"' /> <!--regexpmapper from="^(.*)$" to='"\1"' /--> </pathconvert> <!-- Write to the file --> <echo message="Writing tsc command line arguments to : ${tsc.compile.file}" /> <echo file="${tsc.compile.file}" message="${typescript.file.list}${line.separator}${out.arg}${line.separator}${module.arg}${line.separator}${comments.arg}${line.separator}${declarations.arg}${line.separator}${nolib.arg}${line.separator}${target.arg}" append="false" /> <!-- Compile using the generated compile file --> <echo message="Calling ${typescript.compiler.path} with ${tsc.compile.file}" /> <exec dir="@{src}" executable="${typescript.compiler.path}"> <arg value="@${tsc.compile.file}"/> </exec> <!-- Finally delete the compile file --> <echo message="${tsc.compile.file} deleted" /> <delete file="${tsc.compile.file}" /> </sequential> </macrodef>
Используйте его в своем файле сборки с помощью:
<!-- Compile a single JavaScript file in the bin dir for release --> <TypeScriptCompileDir src="${src-js.dir}" out="${release-file-path}" module="amd" />
Он используется в проекте PureMVC для TypeScript, над которым я работаю в то время, используя Webstorm.
источник
РЕДАКТИРОВАТЬ: Обратите внимание, это если у вас есть несколько файлов tsconfig.json в вашем источнике машинописного текста. В моем проекте каждый файл tsconfig.json компилируется в файл .js с другим именем. Это упрощает просмотр каждого файла с машинописным текстом.
Я написал замечательный bash-скрипт, который находит все ваши файлы tsconfig.json и запускает их в фоновом режиме, а затем, если вы нажмете CTRL + C на терминале, он закроет все запущенные команды просмотра машинописного текста.
Это проверено на MacOS, но должно работать везде, где поддерживается BASH 3.2.57. В будущих версиях могут быть некоторые изменения, поэтому будьте осторожны!
#!/bin/bash # run "chmod +x typescript-search-and-compile.sh" in the directory of this file to ENABLE execution of this script # then in terminal run "path/to/this/file/typescript-search-and-compile.sh" to execute this script # (or "./typescript-search-and-compile.sh" if your terminal is in the folder the script is in) # !!! CHANGE ME !!! # location of your scripts root folder # make sure that you do not add a trailing "/" at the end!! # also, no spaces! If you have a space in the filepath, then # you have to follow this link: https://stackoverflow.com/a/16703720/9800782 sr=~/path/to/scripts/root/folder # !!! CHANGE ME !!! # find all typescript config files scripts=$(find $sr -name "tsconfig.json") for s in $scripts do # strip off the word "tsconfig.json" cd ${s%/*} # */ # this function gets incorrectly parsed by style linters on web # run the typescript watch in the background tsc -w & # get the pid of the last executed background function pids+=$! # save it to an array pids+=" " done # end all processes we spawned when you close this process wait $pids
Полезные ресурсы:
источник