コードを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
フォルダーにも転送されます。
この問題を解決するにはどうすればよいですか?
結局、複数の設定ファイルを定義し、extends
を使用してそれらを単純化しました。
2つのファイルがあるとします: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)ハンドル。
更新:プロジェクトが成長するにつれて、構成ファイルが増えました。 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": [ ... ]
}
これは、使用しているテストフレームワークに多少依存しますが、テストファイルをコンパイルするには 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
に設定するか、アプリケーションコードのベースフォルダーを指定してTypeScriptを実行しようとすると、外部のtests
。 ts-node
を使用すると、TypeScript構成ファイルを個別に用意しなくても、すべてを簡単に分離できます。
あなたの設定で「ファイル」オプションを使用するべきではないと思います。代わりに、不要なファイルを除外して、次のようにすることができます。
{
"compilerOptions": {
"module": "commonjs",
"outDir": "dist"
},
"exclude": [
"node_modules",
"dist",
"typings/browser.d.ts",
"typings/browser/**"
]
}
これにより、テストとアプリjsファイルを混在させることなく、「dist」フォルダー内の元の構造が保持されます。
--dist
----spec
-------....
----src
-------....