Skip to content

Instantly share code, notes, and snippets.

@bathtimefish
Created January 15, 2013 10:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bathtimefish/4537698 to your computer and use it in GitHub Desktop.
Save bathtimefish/4537698 to your computer and use it in GitHub Desktop.
Yeomanでクラスごとに分割したCoffeeScriptファイルを結合してからコンパイルするよう設定したGruntfile.js watchブロックで.coffeeをconcatしてall.coffeeを生成、all.coffeeをall.jsにコンパイルする。このサンプルではJubiolのソースコードをコンパイルできるよう設定してある。 https://github.com/giginet/Jubiol
module.exports = function( grunt ) {
'use strict';
//
// Grunt configuration:
//
// https://github.com/cowboy/grunt/blob/master/docs/getting_started.md
//
grunt.initConfig({
// Project configuration
// ---------------------
// specify an alternate install location for Bower
bower: {
dir: 'app/components'
},
/* coffeeファイルの結合
* scripts下のすべてのcoffeeをひとつのjsに結合する
* 下部で定義されている concat をコメントアウトしてある
* jubiolのcoffeeには結合順があるので順番にソースを定義する
*/
concat: {
dist: {
src: [
'app/scripts/lib/vector.coffee',
'app/scripts/lib/array.coffee',
'app/scripts/lib/timer.coffee',
'app/scripts/lib/jukebox.coffee',
'app/scripts/main.coffee',
'app/scripts/sprite.coffee',
'app/scripts/player.coffee',
'app/scripts/bullet.coffee',
'app/scripts/state.coffee',
'app/scripts/level.coffee',
'app/scripts/stage.coffee',
'app/scripts/scene.coffee'
],
dest: 'app/scripts/all.coffee'
}
},
// Coffee to JS compilation
coffee: {
compile: {
files: {
//'temp/scripts/*.js': 'app/scripts/**/*.coffee'
/*
* JSにコンパイルするのはall.coffeeのみとする
*/
'temp/scripts/all.js': 'app/scripts/**/all.coffee'
},
options: {
basePath: 'app/scripts'
}
}
},
// compile .scss/.sass to .css using Compass
compass: {
dist: {
// http://compass-style.org/help/tutorials/configuration-reference/#configuration-properties
options: {
css_dir: 'temp/styles',
sass_dir: 'app/styles',
images_dir: 'app/images',
javascripts_dir: 'temp/scripts',
force: true
}
}
},
// generate application cache manifest
manifest:{
dest: ''
},
// headless testing through PhantomJS
mocha: {
all: ['test/**/*.html']
},
// default watch configuration
watch: {
/* watchブロックにconcatを追加
* coffeeの更新を検知してconcatを実行する
* その後coffeeが走るのでreloadは不要
*/
concat: {
files: 'app/scripts/**/*.coffee',
tasks: 'concat'
},
coffee: {
files: 'app/scripts/**/*.coffee',
tasks: 'coffee reload'
},
compass: {
files: [
'app/styles/**/*.{scss,sass}'
],
tasks: 'compass reload'
},
reload: {
files: [
'app/*.html',
'app/styles/**/*.css',
'app/scripts/**/*.js',
'app/images/**/*'
],
tasks: 'reload'
}
},
// default lint configuration, change this to match your setup:
// https://github.com/cowboy/grunt/blob/master/docs/task_lint.md#lint-built-in-task
lint: {
files: [
'Gruntfile.js',
'app/scripts/**/*.js',
'spec/**/*.js'
]
},
// specifying JSHint options and globals
// https://github.com/cowboy/grunt/blob/master/docs/task_lint.md#specifying-jshint-options-and-globals
jshint: {
options: {
curly: true,
eqeqeq: true,
immed: true,
latedef: true,
newcap: true,
noarg: true,
sub: true,
undef: true,
boss: true,
eqnull: true,
browser: true
},
globals: {
jQuery: true
}
},
// Build configuration
// -------------------
// the staging directory used during the process
staging: 'temp',
// final build output
output: 'dist',
mkdirs: {
staging: 'app/'
},
// Below, all paths are relative to the staging directory, which is a copy
// of the app/ directory. Any .gitignore, .ignore and .buildignore file
// that might appear in the app/ tree are used to ignore these values
// during the copy process.
// concat css/**/*.css files, inline @import, output a single minified css
css: {
'styles/main.css': ['styles/**/*.css']
},
// renames JS/CSS to prepend a hash of their contents for easier
// versioning
rev: {
js: 'scripts/**/*.js',
css: 'styles/**/*.css',
img: 'images/**'
},
// usemin handler should point to the file containing
// the usemin blocks to be parsed
'usemin-handler': {
html: 'index.html'
},
// update references in HTML/CSS to revved files
usemin: {
html: ['**/*.html'],
css: ['**/*.css']
},
// HTML minification
html: {
files: ['**/*.html']
},
// Optimizes JPGs and PNGs (with jpegtran & optipng)
img: {
dist: '<config:rev.img>'
},
// rjs configuration. You don't necessarily need to specify the typical
// `path` configuration, the rjs task will parse these values from your
// main module, using http://requirejs.org/docs/optimization.html#mainConfigFile
//
// name / out / mainConfig file should be used. You can let it blank if
// you're using usemin-handler to parse rjs config from markup (default
// setup)
rjs: {
// no minification, is done by the min task
optimize: 'none',
baseUrl: './scripts',
wrap: true,
name: 'main'
},
// While Yeoman handles concat/min when using
// usemin blocks, you can still use them manually
/*
concat: {
dist: ''
},
*/
min: {
dist: ''
}
});
// Alias the `test` task to run the `mocha` task instead
grunt.registerTask('test', 'server:phantom mocha');
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment