yaakaito.org

TypeScript0.9alphaをMac+Gruntで使うよ

TypeScript

こんにちは!うきょーです! TypeScript0.9alphaがちょっと前に出ましたね。 npm経由でインストールできなくてだるいので使ってなかったんですが、0.9の機能試したくなったのでがんばって使えるようにすることにしました。

TypeScriptのコンパイル

developをコンパイルすると大体いい感じだと思うのでそうしましょう。 この辺は本家にも載ってますね。リポジトリでけぇ。 jakeが必要なのでいれます。

1
2
3
4
5
6
$ npm install -g jake
$ git clone https://git01.codeplex.com/typescript
$ cd typescript
$ git checkout develop
$ jake local
$ chmod +x bin/tsc

これで typescript/bin/tsc が使えるようになります。

1
2
3
4
5
6
7
8
9
$ ./bin/tsc
Version 0.9.0.0
Syntax:   tsc [options] [file ..]

Examples: tsc hello.ts
          tsc --out foo.js foo.ts
          tsc @args.txt

// ...

やったー!!

grunt-typescript

普段のビルドはgrunt-typesriptを使っているので、これが動くと便利な訳です。 どういう指定になってるのかなーと見てみたら、

1
2
3
4
5
6
7
8
9
10
11
12
13
resolveTypeScriptBinPath = function (currentPath, depth) {
    var targetPath = path.resolve(__dirname,
        (new Array(depth + 1)).join("../../"),
        "../node_modules/typescript/bin");
    if (path.resolve(currentPath, "node_modules/typescript/bin").length > targetPath.length) {
        return;
    }
    if (fs.existsSync(path.resolve(targetPath, "typescript.js"))) {
        return targetPath;
    }

    return resolveTypeScriptBinPath(currentPath, ++depth);
}

なるほど? つまりはこいつのnode_moduleに入ってるtypescriptを丸ごと置き換えちゃえば動くんじゃないかなーーーーーーーーやっちゃえーーーーーー^ー^

1
2
$ rm /path/to/grunt-typescript/node_modules/typescript
$ cp -r typescript /path/to/grunt-typescript/node_modules

動いた気がする、これはひどい。

適当なファイルをコンパイルしてみる。

1
2
3
4
5
6
7
8
9
10
Running "typescript:compile" (typescript) task
Warning: Object module Hoge {

    export class Fuga {
        constructor(public a: string) { }
    }

} has no method 'contents' Use --force to continue.

Aborted due to warnings.

うーん、なんか駄目っぽい。 普通にtscでコンパイルする分にはいけるので、追う意味あんまりないし、tscでコンパイルしよう。

grunt-exec

1
$ npm install grunt-exec --save-dev

Gruntfileはこんな感じで

1
2
3
4
5
6
7
8
9
10
11
12
tsc = "path/to/tsc"

module.exports = (grunt) ->
    grunt.initConfig
        pkg: grunt.file.readJSON 'package.json'
        exec:
            compile:
                cmd: -> "#{tsc} --out compiled/src --declaration src/*.ts"
            test:
                cmd: -> "#{tsc} --out compiled/test test/*.ts"

    grunt.loadNpmTasks 'grunt-exec'

コンパイルできた!

あとはgruntのエイリアスよしなにして、とりあえずこれで使えそう。