Я пытаюсь преобразовать домашнее животное проект машинопись и не похоже , чтобы иметь возможность использовать tscутилиту для просмотра и компилировать мои файлы. Помощь говорит , что я должен использовать -wпереключатель, но похоже , что он не может смотреть и собрать все *.tsфайлы в каком - нибудь каталоге рекурсивно. Это похоже на то , что tscдолжно быть в состоянии справиться. Какие есть варианты?
Как смотреть и собрать все источники машинописи?
Создайте файл с именем tsconfig.jsonв корневом каталоге проекта и включают в себя следующие строки в нем:
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"module": "commonjs",
"target": "ES5",
"outDir": "ts-built",
"rootDir": "src"
}
}
Пожалуйста , обратите внимание , что outDirдолжен быть путь к каталогу , чтобы получить скомпилированные файлы JS, и rootDirдолжен быть путь к директории , содержащей исходные файлы (.ts).
Откройте терминал и запустите tsc -w, он будет компилировать любой .tsфайл в srcдиректории в .jsи хранить их в ts-builtкаталоге.
Машинопись 1,5 бета-тестирования была введена поддержка конфигурационного файла под названием tsconfig.json. В этом файле вы можете настроить компилятор, определить правила форматирования кода и, что более важно для вас, предоставить ему информацию о файлах TS в вашем проекте.
После того, как настроено правильно, вы можете просто запустить команду TSC и его скомпилировать весь код машинописи в вашем проекте.
Если вы хотите, чтобы он посмотреть файлы для изменения, то вы можете просто добавить --watch в команду TSC.
Вот пример файла tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"noLib": false
},
"include": [
"**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]}
В приведенном выше примере, я включаю все файлы .ts в моем проекте (рекурсивно). Обратите внимание, что вы также можете исключить файлы, используя свойство «исключить» с массивом.
Для получения более подробной информации, обратитесь к документации: http://www.typescriptlang.org/docs/handbook/tsconfig-json.html
С технической точки зрения у вас есть несколько вариантов здесь:
Если вы используете IDE , как Sublime Text и интегрированный MSN плагин для Машинопись: http://blogs.msdn.com/b/interoperability/archive/2012/10/01/sublime-text-vi-emacs-typescript-enabled. ASPX вы можете создать систему сборки , которая компилирует .tsисточник в .jsавтоматическом режиме. Вот объяснение , как вы можете это сделать: Как настроить Sublime системы сборки для машинописи .
Вы можете определить даже для компиляции исходного кода в целевой .jsфайл на сохранения файла. Существует возвышенная пакет размещен на GitHub: https://github.com/alexnj/SublimeOnSaveBuild , которые делают это произойдет, только вам нужно включить tsрасширение в SublimeOnSaveBuild.sublime-settingsфайле.
Другая возможность компилировать каждый файл в командной строке. Вы можете собрать даже несколько файлов одновременно, разделяя их пробелами , как так: tsc foo.ts bar.ts. Проверьте эту тему: Как я могу передать несколько исходных файлов в машинописи компилятор? , Но я думаю , что первый вариант более удобен.
Посмотрите в использовании хрюкать, чтобы автоматизировать этот процесс, есть многочисленные учебники вокруг, но вот быстрый старт.
Для структуры папок, как:
blah/
blah/one.ts
blah/two.ts
blah/example/
blah/example/example.ts
blah/example/package.json
blah/example/Gruntfile.js
blah/example/index.html
Вы можете смотреть и работать с машинописью легко из примера папки с:
npm install
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 компилятор будет смотреть только те файлы , которые вы проходите в командной строке. Это будет не смотреть файлы, которые включены с помощью /// <sourcefile>ссылки. Если ваша работа с Баш, вы можете использовать поиск рекурсивно найти все *.tsфайлы и скомпилировать их:
find . -name "*.ts" | xargs tsc -w
Вы можете просматривать все файлы, как это
tsc *.ts --watch
TSC 0.9.1.1 не кажется, есть часы особенность.
вы можете использовать PowerShell сценарий , как тот , который я сделал на этом посту:
Сегодня я разработал эту 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 для машинописи я работаю в то время , используя WebStorm.













