typescript - official - Configurando tsconfig con la carpeta spec/test
typescript strict mode (3)
Acabé definiendo varios archivos de configuración y el uso se extends
para simplificarlos.
Digamos que tengo dos archivos: tsconfig.json
y tsconfig.build.json
// tsconfig.json
{
...
"exclude": [...]
}
// tsconfig.build.json
{
...
"files": [ "typings/index.d.ts", "src/index.ts" ]
}
De esta manera, puedo tener un control preciso sobre qué compilar (usando tsc -p tsconfig.build.json
) y qué maneja el ts language service
(IDE).
ACTUALIZACIÓN: ahora que mis proyectos crecen, terminé teniendo más archivos de configuración. Utilizo la función "extender" que ahora está disponible en TypeScript:
// tsconfig.base.json
{
// your common settings. Mostly "compilerOptions".
// Do not include "files" and "include" here,
// let individual config handles that.
// You can use "exclude" here, but with "include",
// It''s pretty much not necessary.
}
// tsconfig.json
{
// This is used by `ts language service` and testing.
// Includes source and test files.
"extends": "./tsconfig.base.json",
"atom": { ... },
"compilerOptions": {
// I set outDir to place all test build in one place,
// and avoid accidentally running `tsc` littering test build to my `src` folder.
"outDir": "out/spec"
}
"include": [ ... ]
}
// tsconfig.commonjs.json or tsconfig.systemjs.json or tsconfig.global.json etc
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
// for some build this does not apply
"declaration": true/false,
"outDir": "dist/<cjs, sys, global, etc>",
"sourceRoot": "..."
},
// Only point to typings and the start of your source, e.g. `src/index.ts`
"files": [ ... ],
"include": [ ... ]
}
Digamos que pongo mi código bajo src
y pruebas bajo spec
:
+ spec
+ --- classA.spec.ts
+ src
+ --- classA.ts
+ --- classB.ts
+ --- index.ts
+ tsconfig.json
Sólo quiero transpilar src
a la carpeta dist
. Dado que index.ts
es el punto de entrada de mi paquete, mi tsconfig.json
aspecto:
{
"compileOptions": {
"module": "commonjs"
"outDir": "dist"
},
"files": {
"src/index.ts",
"typings/main.d.ts"
}
}
Sin embargo, este tsconfig.json
no incluye los archivos de prueba, por lo que no pude resolver las dependencias en ellos.
Por otro lado, si tsconfig.json
archivos de prueba en tsconfig.json
, también se transpilen a la carpeta dist
.
¿Cómo resuelvo este problema?
Creo que no deberías usar la opción ''archivos'' en tu configuración. En su lugar, puedes excluir archivos no deseados y tenerlos así:
{
"compilerOptions": {
"module": "commonjs",
"outDir": "dist"
},
"exclude": [
"node_modules",
"dist",
"typings/browser.d.ts",
"typings/browser/**"
]
}
Esto mantendrá su estructura original en la carpeta ''dist'' sin mezclar pruebas y archivos de aplicaciones js:
--dist
----spec
-------....
----src
-------....
Esto depende en cierta medida del marco de prueba que esté utilizando, pero me gusta usar ts-node para compilar mis archivos de prueba. Usando mocha, su npm test
podría verse así:
"mocha": "mocha test/ --compilers ts:ts-node/register --recursive"
En su tsconfig.json, asegúrese de eliminar la opción rootDir
.
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": false,
"removeComments": true,
"sourceMap": true,
"outDir": "lib"
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules",
"lib",
"typings/**"
]
}
Cuando intente ejecutar mecanografiado con rootDir
configurado a src
o cualquiera que sea la carpeta base para el código de su aplicación, no se permitirá ninguna compilación en un directorio que se encuentre afuera, tales tests
. Al utilizar ts-node
, puede mantener todo separado por separado sin tener que tener archivos de configuración de TypeScript separados.