Je suis assez nouveau sur TypeScript et, à l'heure actuelle, j'ai des fichiers .ts à plusieurs endroits tout au long de la structure de mon projet:
app/
|-scripts/
|-app.ts
|
|-classes/
| |-classA.ts
| |-classB.ts
|
|-controllers/
| |-controllerA.ts
| |-controllerB.ts
|
|-otherStuff/
|-otherstuffA.ts
À l'heure actuelle, lorsque mes fichiers sont compilés, ils sont compilés dans le même répertoire que celui dans lequel se trouvent les fichiers .ts:
app/
|-scripts/
|-app.ts
|-app.js
|
|-classes/
| |-classA.ts
| |-classB.ts
| |-classA.js
| |-classB.js
|
|-controllers/
| |-controllerA.ts
| |-controllerB.ts
| |-controllerA.js
| |-controllerB.js
|
|-otherStuff/
|-otherstuffA.ts
|-otherStuffA.js
Bien que j'apprécie le fait que les fichiers .js conservent la même structure de répertoires que les fichiers .ts, je ne souhaite pas suivre les fichiers .js de mon VCS. Par conséquent, j'aimerais conserver tous mes fichiers JavaScript dans un fichier. arborescence de répertoires séparée (que je peux ensuite ajouter à .gitignore), comme ceci:
app/
|-scripts/
| |-app.ts
| |
| |-classes/
| | |-classA.ts
| | |-classB.ts
| |
| |-controllers/
| | |-controllerA.ts
| | |-controllerB.ts
| |
| |-otherStuff/
| |-otherstuffA.ts
|
|-js/
|-app.js
|
|-classes/
| |-classA.js
| |-classB.js
|
|-controllers/
| |-controllerA.js
| |-controllerB.js
|
|-otherStuff/
|-otherstuffA.js
Existe-t-il un paramètre ou une option quelque part qui dira au compilateur TypeScript de le faire? De plus, je ne sais pas si c'est pertinent, mais j'utilise WebStorm.
Utilisez l'option --outDir
on tsc (configuré dans l'observateur de fichiers dans IntelliJ)
Depuis la documentation en ligne de commande
--outDir DIRECTORY Redirect output structure to the directory.
Éditer
Depuis TypeScript 1.5, cela peut également être défini dans le tsconfig.json
fichier:
"compilerOptions": {
"outDir": "DIRECTORY"
...
Ou, ajoutez "outDir": "build"
to tsconfig.json fichier
Bien que ces réponses soient correctes, vous devriez vous demander si vous voulez simplement cacher vos fichiers .js à votre IDE.
Dans Visual Studio Code, accédez à File > Preferences > Settings
ou votre .vscode\settings.json
fichier et entrez:
"files.exclude": {
"**/.git": true,
"**/.DS_Store": true,
"**/*.js" : {
"when": "$(basename).ts"
},
"**/*.js.map": {
"when": "$(basename)"
}
}
Ce qui précède masque les fichiers .js contenant un fichier .ts correspondant.
J'ai installé package.json comme ça pour que taper npm run start
tout en sortie sur build
. Les fichiers sources sont conservés dans src
. Le fichier de sortie est spécifié par --outDir build
.
{
"name": "myapp",
"version": "0.0.1",
"scripts": {
"tsc": "tsc",
"tsc:w": "tsc -w --outDir build",
"lite": "lite-server",
"start": "concurrent \"npm run tsc:w\" \"npm run lite\" "
},
"license": "private",
"dependencies": {
"angular2": "2.0.0-beta.0",
"systemjs": "0.19.6",
"es6-promise": "^3.0.2",
"es6-shim": "^0.33.3",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.0",
"zone.js": "0.5.10"
},
"devDependencies": {
"concurrently": "^1.0.0",
"lite-server": "^1.3.1",
"TypeScript": "^1.7.3"
}
}
Vous pouvez exclure votre répertoire de construction dans tsconfig.json, bien que ce ne soit probablement pas nécessaire, car il n'y a que JS à cet emplacement:
{
"compilerOptions": {
"target": "ES5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules",
"build"
]
}
Si vous souhaitez mapper la structure de répertoires du dossier app/scripts dans js, nous vous suggérons d'utiliser les paramètres suivants pour votre observateur de fichiers:
Arguments: --sourcemap --outDir $ProjectFileDir$/js/$FileDirPathFromParent(scripts)$ $FileName$
Working Directory: $FileDir$
Output Paths To Refresh: $ProjectFileDir$/js/$FileDirPathFromParent(scripts)$/$FileNameWithoutExtension$.js:$ProjectFileDir$/js/$FileDirPathFromParent(scripts)$/$FileNameWithoutExtension$.js.map
Utilisateurs Intellij, compilez TypeScript dans plusieurs répertoires de sortie
Pour les utilisateurs d'Intellij, cela peut être utile. C’est ainsi que j’ai obtenu cela avec le compilateur TypeScript intégré.
Informations sur l'environnement
Exemple de structure de répertoire
BEFORE COMPILE
----------------------------------------
-> JS
-> app
-> config.js //this is not generated
-> libs
-> jquery.js //this is not generated
-> plugins
-> TS
-> app
-> main.ts
-> libs
-> jquery.d.ts
-> plugins
-> somePlugin.ts
AFTER COMPILE
----------------------------------------
-> JS
-> app
-> config.js //this is not generated
-> main.js
-> libs
-> jquery.js //this is not generated
-> plugins
somePlugin.ts
-> TS
-> app
-> main.ts
-> libs
-> jquery.d.ts //this is where I kept my definition files
-> plugins
-> somePlugin.ts
Configuration intelligente
C:\yourUserName\AppData\Roaming\npm\node_modules\TypeScript\lib
-m AMD -t ES6 -outDir E:\myapp\js
E:\myapp\ts\main.ts
Si cette case n'est pas cochée, tous vos fichiers essaieront de sortir dans votre chemin outDir.En utilisant Atom avec l'extension atom-TypeScript et mon tsconfig.json ressemble à ceci:
{
"compilerOptions": {
"outDir":"js"
}
}