grunt front-osaka-1-lt-tanaka

35
WebStorm+Grunt +CoffeeScript+TypeScript 最近こんな感じでやってます

Upload: hisateru-tanaka

Post on 27-Jan-2015

112 views

Category:

Technology


5 download

DESCRIPTION

Grunt Front Osaka vol1 の LT

TRANSCRIPT

Page 1: Grunt front-osaka-1-lt-tanaka

WebStorm+Grunt+CoffeeScript+TypeScript

最近こんな感じでやってます

Page 2: Grunt front-osaka-1-lt-tanaka

たなかひさてる @tanakahisateru

Pinoco developerPHPTAL contributorFirebug translation contributorYii framework user

Page 3: Grunt front-osaka-1-lt-tanaka

はじめました

Page 4: Grunt front-osaka-1-lt-tanaka
Page 5: Grunt front-osaka-1-lt-tanaka

8.0 で Grunt サポート!!やったブヒー

Page 6: Grunt front-osaka-1-lt-tanaka
Page 7: Grunt front-osaka-1-lt-tanaka

module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), clean: { demo: ['build/*'] }, cssmin: { demo: { files: { 'build/css/demo.min.css': [ 'src/css/app.css', 'src/css/style.css' ] } } }, uglify: { demo: { options: { sourceMap: true }, files: { 'build/js/demo.min.js': [ 'src/js/app.js', 'src/js/util.js' ], 'build/asset/underscore/underscore.min.js': [ 'build/asset/underscore/underscore.js' ] } } },

Page 8: Grunt front-osaka-1-lt-tanaka

module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), clean: { demo: ['build/*'] }, cssmin: { demo: { files: { 'build/css/demo.min.css': [ 'src/css/app.css', 'src/css/style.css' ] } } }, uglify: { demo: { options: { sourceMap: true }, files: { 'build/js/demo.min.js': [ 'src/js/app.js', 'src/js/util.js' ], 'build/asset/underscore/underscore.min.js': [ 'build/asset/underscore/underscore.js' ] } } },

末尾はカンマだめ

このへんがウザい

Page 9: Grunt front-osaka-1-lt-tanaka

ないわー 閉じカッコとかないわー 普通インデント使うわー

ケツカンマ禁止とかまじないわー JSONとか人間が書くもんちゃうでー

YAML使うわ―

Page 10: Grunt front-osaka-1-lt-tanaka
Page 11: Grunt front-osaka-1-lt-tanaka

CoffeeScriptの文法

• 文法的に末尾カンマ許可

• 改行が要素の区切りと解釈される

• インデントで構文が組める

• 改行を使うとオブジェクトの中括弧がなくてもOK

Page 12: Grunt front-osaka-1-lt-tanaka

module.exports = (grunt) -> ! grunt.initConfig pkg: grunt.file.readJSON 'package.json' clean: demo: ['build/*'] cssmin: demo: files: 'build/css/demo.min.css': [ ‘src/css/app.css', ‘src/css/style.css', ] uglify: demo: options: sourceMap: true files: 'build/js/demo.min.js': [ 'src/js/app.js' 'src/js/util.js' ] 'build/asset/underscore/underscore.min.js': [ 'build/asset/underscore/underscore.js' ]

あるとき

ないとき

スッキリ

Page 13: Grunt front-osaka-1-lt-tanaka

ケツカンマフリー

,

Page 14: Grunt front-osaka-1-lt-tanaka

] } } },

Page 15: Grunt front-osaka-1-lt-tanaka

※ プログラミング には使っていません

Page 16: Grunt front-osaka-1-lt-tanaka
Page 17: Grunt front-osaka-1-lt-tanaka

アンダースコア、まあこれはこれでイイけどさぁ… ユーザーライブラリの関数定義読むJSのIDEって

だけですごいのはいいんだけど

Page 18: Grunt front-osaka-1-lt-tanaka

本当は _.map() のほうが好きなんだ

Page 19: Grunt front-osaka-1-lt-tanaka

無反応orz

Page 20: Grunt front-osaka-1-lt-tanaka

_.mapの定義 // Return the results of applying the iterator to each element. // Delegates to **ECMAScript 5**'s native `map` if available. _.map = _.collect = function(obj, iterator, context) { var results = []; /* 略 */

return results; };

あーこれじゃ _.collect = function() しか認識しないよ

Page 21: Grunt front-osaka-1-lt-tanaka

JavaScript自由すぎ このIDE殺しめ

Page 22: Grunt front-osaka-1-lt-tanaka
Page 23: Grunt front-osaka-1-lt-tanaka

class Greeter<T> { greeting: T; constructor(message: T) { this.greeting = message; } greet() { return this.greeting; } } !var greeter = new Greeter<string>("Hello, world");

カッチカチですね

Page 24: Grunt front-osaka-1-lt-tanaka

で、この文法でインターフェース定義だけ集める プロジェクトがありまして

https://github.com/borisyankov/DefinitelyTyped

*.d.ts

Page 25: Grunt front-osaka-1-lt-tanaka

TSD

Page 26: Grunt front-osaka-1-lt-tanaka

tsd query underscore —-action install —-save⏎

npm install tsd —-global⏎

Page 27: Grunt front-osaka-1-lt-tanaka

*.d.ts の中身interface UnderscoreStatic { ! /** * Produces a new array of values by mapping each … * * @param list Maps the elements of this array. * @param iterator Map iterator function for each element in `list`. * @param context `this` object in `iterator`, optional. * @return The mapped array result. **/ map<T, TResult>( list: _.List<T>, iterator: _.ListIterator<T, TResult>, context?: any): TResult[];

(こんな感じでいっぱい書いてある)

Page 28: Grunt front-osaka-1-lt-tanaka

こうなってこれが

Page 29: Grunt front-osaka-1-lt-tanaka

こんなことも!

Page 30: Grunt front-osaka-1-lt-tanaka

おーいみんな同じバージョンの typings 共有できるよー

tsd の —-save オプションで tsd.json ができてて、 これ使うと npm の packages.json みたいに…

grunt.loadNpmTask ‘grunt-tsd’

grunt tsd⏎

npm install grunt-tsd⏎

全自動ダウンロードやっほい♪

Page 31: Grunt front-osaka-1-lt-tanaka

※ プログラミング には使っていません

Page 32: Grunt front-osaka-1-lt-tanaka

まだ *.js でがんばる理由• CoffeeScript も TypeScript もブラウザでそのまま実行できない。ビルドが必要

• 新しい言語の文法を知らない人でも開発できるように

• 「Sass使ってるのにCSS直で書き換えんな」事件

• どうせブラウザのデバッグコンソールじゃ JavaScript の構文で考えることになるし

Page 33: Grunt front-osaka-1-lt-tanaka

オチ

Page 34: Grunt front-osaka-1-lt-tanaka

えーとえーと、 ライブラリ検索パスの設定どこだったかなー

Page 35: Grunt front-osaka-1-lt-tanaka

あれ? WebStorm の設定ダイアログに Download って…