LoginSignup
2
3

More than 5 years have passed since last update.

【TypeScript】dtsmをCIで使う

Last updated at Posted at 2015-05-11

dtsmとは

dtsm@vvakameさん製のTypeScript型定義ファイルをいい感じに管理するツール(c.f. JSのnpmやbower,Rubyのbundler).
tsdというデファクトスタンダードみたいなやつもあるが,サブコマンドが難しくて覚えられない….dtsmはサブコマンドがnpmやbower等と同じになってるのでとても良い:rabbit2:
詳しくは@vvakameさんのQiita記事参照.

dtmsを利用する上での課題

dtsm.jsonpackage.jsonGemfileの役割を果たすが,環境によって利用する*.d.tsを分けることが出来ない(c.f. npmのdevDependencies, bundlerのgroup :test).
そして,*.d.tsはちょっとしたことですぐに競合する(e.g. node/node.d.tsangularjs/angular-mocks.d.tsmodule).
こうなると,bundle.d.tsdtsm installしたファイルが全部referenceされるやつ)をそのまま読み込むとtscが通らなくなる.

typings/angularjs/angular-mocks.d.ts(21,13): TS2403: Subsequent variable declarations must have the same type.  Variable 'module' must be of type '{ exports: any; require(id: string): any; id: string; filename: string; loaded: boolean; parent: ...', but here has type '(...modules: any[]) => any'.

CI環境でdtsm installを実行すると,bundle.d.tsが全部上書きされる.これをそのままkarma.conf.js等で読んでしまうと死ぬことになる(typings以下をignoreしている場合の話).

対策: dtsm.jsonの分割

たとえば,dtsm.jsondtsm.test.jsonに分割する.
karma.conf.jsdtsm.test.jsonが吐く方のbundle.d.tsを読むようにすればテストが落ちることもなくなる.

$ dtsm init --config dtsm.json
$ dtsm init --config dtsm.test.json 

dtsm.test.jsonの生成後,少なくともbundleの変更は忘れずに(dtsm.jsonと被ってたら意味なくなる).

dtsm.test.jsonに定義ファイルを追加する際は,--configオプションをdtsminstallの間に付与する.

$ dstm --config dstm.test.json install angularjs/angular-mocks.d.ts

dtsm本体のオプション(e.g. --config)がサブコマンド(e.g. install)より後ろに来ると動かないので注意.

そもそも…

  • もしかしてtypings/*.d.tsをignoreするのが良くなかったりする?
  • コンパイル前の*.tsをCIに投げ渡すのがよくない?
  • コンパイル後の*.jsもignoreせずにcommitすべき?

JavaScriptむずかしい.

References

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3