Настройка tsconfig со спецификацией/тестовой папкой
Скажем, я поместил свой код под src
и проверил в spec
:
+ spec
+ --- classA.spec.ts
+ src
+ --- classA.ts
+ --- classB.ts
+ --- index.ts
+ tsconfig.json
Я хочу только переместить src
в папку dist
. Поскольку index.ts
является точкой входа моего пакета, мой tsconfig.json
выглядит следующим образом:
{
"compileOptions": {
"module": "commonjs"
"outDir": "dist"
},
"files": {
"src/index.ts",
"typings/main.d.ts"
}
}
Однако этот tsconfig.json
не включает тестовые файлы, поэтому я не могу разрешать в них зависимости.
С другой стороны, если я включаю тестовые файлы в tsconfig.json
, то они также передаются в папку dist
.
Как решить эту проблему?
Ответы
Ответ 1
В итоге я определил несколько файлов конфигурации и использовал extends
, чтобы упростить их.
Скажем, у меня есть два файла: tsconfig.json
и tsconfig.build.json
// tsconfig.json
{
...
"exclude": [...]
}
// tsconfig.build.json
{
...
"files": [ "typings/index.d.ts", "src/index.ts" ]
}
Таким образом, я могу точно контролировать, что строить (используя tsc -p tsconfig.build.json
) и то, что обрабатывает ts language service
(IDE).
UPDATE: теперь, когда мои проекты растут, у меня появилось больше конфигурационных файлов. Я использую функцию "расширения", которая теперь доступна в 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 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": [ ... ]
}
Ответ 2
Это в некоторой степени зависит от того, какую среду тестирования вы используете, но мне нравится использовать ts-node для компиляции моих тестовых файлов. Используя mocha, ваш скрипт npm test
может выглядеть так:
"mocha": "mocha test/ --compilers ts:ts-node/register --recursive"
В вашем файле tsconfig.json обязательно удалите опцию rootDir
.
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": false,
"removeComments": true,
"sourceMap": true,
"outDir": "lib"
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules",
"lib",
"typings/**"
]
}
Когда вы пытаетесь запустить машинописный текст с rootDir
, установленным на src
, или любой другой базовой папкой для кода вашего приложения, он запрещает любую компиляцию в каталоге, который находится снаружи, например, tests
. Используя ts-node
, вы можете легко хранить все отдельно, без необходимости иметь отдельные файлы конфигурации TypeScript.
Ответ 3
Я думаю, вы не должны использовать опцию "файлы" в своей конфигурации. Вместо этого вы можете исключить ненужные файлы и сделать это следующим образом:
{
"compilerOptions": {
"module": "commonjs",
"outDir": "dist"
},
"exclude": [
"node_modules",
"dist",
"typings/browser.d.ts",
"typings/browser/**"
]
}
Это сохранит вашу исходную структуру в папке "dist" без смешивания тестов и файлов приложений js:
--dist
----spec
-------....
----src
-------....