Skip to content

Instantly share code, notes, and snippets.

@masamunet
Last active December 20, 2015 13:29
Show Gist options
  • Save masamunet/6139374 to your computer and use it in GitHub Desktop.
Save masamunet/6139374 to your computer and use it in GitHub Desktop.
ぼくがかんがえたさいきょうのGruntfileを晒してみる ref: http://qiita.com/masamunet/items/34022da57e2143d9084a
#除外ファイル
exclude = [
'!**/.DS_Store'
'!**/Thumbs.db'
'!**/*.coffee'
'!**/*.map'
'!**/*.scss'
'!**/*.less'
'!**/*.s.css'
'!**/*.l.css'
'!**/<%= dir.cssCompile %>/'
'!**/coffee/'
'!**/sass/'
'!**/less/'
'!**/_notes/'
'!**/.idea/'
'!**/.gitignore'
'!**/*.mno'
'!**/Templates/'
'!**/Library'
'!**/*.dwt'
'!**/*.lbi'
'!**/*.fla'
]
module.exports = (grunt) ->
pkg = grunt.file.readJSON 'package.json'
grunt.initConfig
#ディレクトリ設定
dir :
src : 'src'
dist : 'dist'
test : '<%= dir.src %>/test'
doc : 'docs'
js : 'js'
css : 'css'
cssCompile : '<%= dir.src %>/<%= dir.css %>.compile'
#package.jsonの読み込み
pkg : pkg
#クリーン
clean:
js:
src : '<%= dir.src %>/<%= dir.js %>/*'
css:
src : '<%= dir.src %>/<%= dir.css %>/*'
build :
src : ['<%= dir.dist %>/**', '<%= dir.doc %>/**']
#CoffeeScriptコンパイル
coffee:
options:
sourceMap : true
#通常はルートディレクトリのcoffeeディレクトリに置かれたスクリプトをメインとする
main :
src : '<%= dir.src %>/coffee/*.coffee'
dest : '<%= dir.src %>/<%= dir.js %>/<%= pkg.name %>.js'
#サブディレクトリのCoffeeScriptもコンパイル
all :
expand : true
ext : '.js'
src : ['<%= dir.src %>/**/*.coffee', '!<%= coffee.main.src %>']
#Sassコンパイル
sass:
#通常はルートディレクトリのsassディレクトリに置かれたCSSをメインとする
main :
src : '<%= dir.src %>/sass/*.scss'
dest : '<%= dir.cssCompile %>/<%= pkg.name %>.s.css'
#サブディレクトリのSassもコンパイル
all :
expand : true
ext : '.css'
src : ['<%= dir.src %>/**/*.scss', '!<%= sass.main.src %>', '!<%= dir.src %>/<%= dir.css %>/<%= pkg.name %>.css', '<%= concat.css.dest %>']
#Lessコンパイル
less:
#通常はルートディレクトリのlessディレクトリに置かれたCSSをメインとする
main :
src : '<%= dir.src %>/less/*.less'
dest : '<%= dir.cssCompile %>/<%= pkg.name %>.l.css'
#サブディレクトリのlassもコンパイル
all :
expand : true
ext : '.css'
src : ['<%= dir.src %>/**/*.less', '!<%= less.main.src %>', '!<%= dir.src %>/<%= dir.css %>/<%= pkg.name %>.css', '<%= concat.css.dest %>']
#結合
concat:
#コンパイルされたCSSを結合
css :
src : '<%= dir.cssCompile %>/*.*.css'
dest : '<%= dir.src %>/<%= dir.css %>/<%= pkg.name %>.css'
#画像最適化
imagemin:
dev :
optimizationLevel: 3
files : [
expand: true
src: '<%= dir.src %>/**/*.{png,jpg,jpeg}'
]
dist :
optimizationLevel: 3
files : [
expand: true
src: '<%= dir.dist %>/**/*.{png,jpg,jpeg}'
]
#監視ファイル
watch:
coffee:
files : '<%= coffee.main.src %>'
tasks : 'coffee:main'
coffeeAll:
files : '<%= coffee.all.src %>'
tasks : 'coffee:all'
sass:
files : '<%= sass.main.src %>'
tasks : 'sass:main'
sassAll:
files : '<%= sass.all.src %>'
tasks : 'sass:all'
less:
files : '<%= less.main.src %>'
tasks : 'less:main'
lessAll:
files : '<%= less.all.src %>'
tasks : 'less:all'
css:
files : '<%= concat.css.src %>'
tasks : 'concat:css'
#コピー
copy:
build :
expand : true
filter: 'isFile'
cwd : '<%= dir.src %>/'
src : ['**'].concat exclude
dest : '<%= dir.dist %>/'
#htmlのminify
htmlmin:
all :
options :
removeComments : true
removeCommentsFromCDATA : true
removeCDATASectionsFromCDATA : true
collapseWhitespace : true
removeRedundantAttributes : true
removeOptionalTags : true
expand : true
src : '<%= dir.dist %>/**/*.html'
#JSのminify
uglify:
options :
banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n'
main :
expand : true
src : '<%= dir.dist %>/<%= dir.js %>/<%= pkg.name %>.js'
all :
expand : true
src : ['<%= dir.dist %>/**/*.js', '!<%= uglify.main.src %>']
#CSSのminify
cssmin:
main :
expand : true
src : '<$= dir.dist %>/<%= dir.css %>/<%= pkg.name %>.css'
all :
expand : true
src : ['<%= dir.dist %>/**/*.css', '!<%= cssmin.main.src %>']
#yuidoc
yuidoc:
dist:
name : '<%= pkg.name %>'
description : '<%= pkg.description %>'
version : '<%= pkg.version %>'
options :
paths : '<%= dir.src %>/'
outdir : '<%= dir.doc %>'
syntaxtype : 'coffee'
extension : '.coffee'
for taskName of pkg.devDependencies when taskName.substring(0, 6) is 'grunt-'
grunt.loadNpmTasks taskName
#どういった用途で使用するか明示的にするためにも、冗長なエイリアスも指定しておく
grunt.registerTask 'default', 'watch'
grunt.registerTask 'w', 'watch'
grunt.registerTask 'c', ['clean:js', 'clean:css']
grunt.registerTask 'main', ['coffee:main', 'sass:main', 'less:main']
grunt.registerTask 'compile', ['coffee:all', 'sass:all', 'less:all']
grunt.registerTask 'img', 'imagemin:dev'
grunt.registerTask 'build', ['clean:build', 'copy', 'imagemin:dist', 'htmlmin', 'uglify', 'cssmin', 'yuidoc']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment