Last active
August 29, 2015 14:06
-
-
Save dominikwilkowski/dd93a3a6da125b2b0685 to your computer and use it in GitHub Desktop.
Basic grunt setup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
/******************************************************************************************************* | |
* | |
* FOLDER STRUCTURE | |
* | |
* dev // files in root just move to ./prod/ and *.html files will look for grunt-includes directives | |
* ├── HTMLincludes // HTML snippets included by grunt-includes | |
* │ └── windows.html | |
* ├── fonts // files will simply be moved to ./prod/fonts/ | |
* │ └── font.woff2 | |
* ├── img // images will be minified and moved to ./prod/img/ | |
* │ └── image.jpg | |
* ├── index.html | |
* ├── js // javascript files will be concatenated and minified by file naming order | |
* │ ├── 010-first-file.js | |
* │ ├── 020-second-file.js | |
* │ └── libs // files will simply be moved to ./prod/js/libs | |
* ├── php // files will simply be moved to ./prod/php/ | |
* │ └── script.php | |
* ├── stylus // in this folder only the site.styl will be compiled into css and copied to .prod/css/ | |
* │ ├── base | |
* │ │ └── normalise.styl | |
* │ ├── module | |
* │ │ └── module1.styl | |
* │ └── site.styl | |
* └── svg // all svg files will be minified and run through grunt-grunticon to ./prod/css/ | |
* └── symbole.svg | |
* | |
* | |
*******************************************************************************************************/ | |
module.exports = function(grunt) { | |
//dependencies | |
grunt.loadNpmTasks('grunt-contrib-stylus'); | |
grunt.loadNpmTasks('grunt-contrib-connect'); | |
grunt.loadNpmTasks('grunt-contrib-watch'); | |
grunt.loadNpmTasks('grunt-includes'); | |
grunt.loadNpmTasks('grunt-text-replace'); | |
grunt.loadNpmTasks('grunt-autoprefixer'); | |
grunt.loadNpmTasks('grunt-contrib-uglify'); | |
grunt.loadNpmTasks('grunt-contrib-imagemin'); | |
grunt.loadNpmTasks('grunt-grunticon'); | |
grunt.loadNpmTasks('grunt-svgmin'); | |
grunt.loadNpmTasks('grunt-copy-to'); | |
grunt.loadNpmTasks('grunt-bumpup'); | |
grunt.loadNpmTasks('grunt-contrib-clean'); | |
grunt.loadNpmTasks('grunt-mkdir'); | |
grunt.initConfig({ | |
pkg: grunt.file.readJSON('package.json'), | |
currentVersion: '<%= pkg.name %>.<%= pkg.version %>', | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// clean task | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
clean: { | |
pre: ['temp', 'prod'], //delete before running | |
post: ['tmp'], //delete after running | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// scaffold all directories | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
mkdir: { | |
scaffold: { | |
options: { | |
create: [ | |
'./dev/HTMLincludes', | |
'./dev/fonts', | |
'./dev/img', | |
'./dev/js/libs', | |
'./dev/php', | |
'./dev/stylus/base', | |
'./dev/stylus/module', | |
'./dev/svg', | |
], | |
} | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// includes task | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
includes: { | |
files: { | |
cwd: 'dev/', | |
src: ['*.html'], // Source files | |
dest: 'tmp/', | |
options: { | |
flatten: true, | |
includePath: 'dev/HTMLincludes/', | |
}, | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// replace task | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
replace: { | |
currentVersion: { | |
src: ['tmp/*.html'], | |
overwrite: true, | |
replacements: [{ | |
from: '--currentVersion--', | |
to: '<%= currentVersion %>', | |
}], | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// stylus task | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
stylus: { | |
site: { | |
options: { | |
compress: true, | |
}, | |
files: { | |
'prod/css/<%= currentVersion %>.min.css': 'dev/stylus/site.styl', | |
}, | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// vendor prefixes | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
autoprefixer: { | |
Prefix: { | |
src: 'prod/css/<%= currentVersion %>.min.css', | |
dest: 'prod/css/<%= currentVersion %>.min.css', | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// JS minification | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
uglify: { | |
js: { | |
files: { | |
'prod/js/<%= currentVersion %>.min.js': ['dev/js/*.js'], | |
}, | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// minify svgs | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
svgmin: { | |
dist: { | |
files: [{ | |
expand: true, | |
cwd: 'dev/svg/', | |
src: ['*.svg'], | |
dest: 'temp/svg/', | |
}], | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// grunticon | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
grunticon: { | |
myIcons: { | |
files: [{ | |
expand: true, | |
cwd: 'temp/svg', | |
src: '*.svg', | |
dest: 'prod/css', | |
}], | |
options: { | |
datasvgcss: 'symbols.data.svg.css', | |
datapngcss: 'symbols.data.png.css', | |
urlpngcss: 'symbols.fallback.css', | |
cssprefix: '.symbol-', | |
customselectors: { | |
// 'radio-on': ['input[type="radio"]:checked + label'], | |
// 'radio-off': ['.radio label', '.radio-inline label'], | |
// 'checkbox-on': ['input[type="checkbox"]:checked + label'], | |
// 'checkbox-off': ['.checkbox label', '.checkbox-inline label'] | |
}, | |
}, | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// minify images | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
imagemin: { | |
images: { | |
options: { | |
optimizationLevel: 4, | |
}, | |
files: [{ | |
expand: true, | |
cwd: 'dev/img', | |
src: ['**/*.{png,jpg,gif}'], | |
dest: 'prod/img/', | |
}], | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// copy all files to prod | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
copyto: { | |
//js folder | |
JS: { | |
files: [{ | |
cwd: 'dev/js/libs', | |
src: ['**/*'], | |
dest: ['prod/js/libs/'] | |
}] | |
}, | |
//fonts | |
Fonts: { | |
files: [{ | |
cwd: 'dev/fonts', | |
src: ['**/*'], | |
dest: ['prod/fonts/'], | |
}], | |
}, | |
//html template | |
Templates: { | |
files: [{ | |
cwd: 'tmp', | |
src: ['*.html'], | |
dest: ['prod/'], | |
}], | |
}, | |
//php files | |
PHP: { | |
files: [{ | |
cwd: 'dev/php/**', | |
src: ['*.php'], | |
dest: ['prod/php/'], | |
}], | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// bum version | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
bumpup: { | |
files: 'package.json', | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// server | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
connect: { | |
server: { | |
options: { | |
open: false, | |
port: 1337, | |
}, | |
}, | |
}, | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// watch for changes | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
watch: { | |
files: [ | |
'dev/**/*', | |
], | |
tasks: ['build'], | |
}, | |
}); | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
// TASKS | |
//---------------------------------------------------------------------------------------------------------------------------------------------------------- | |
grunt.registerTask('build', [ | |
'clean:pre', | |
'includes', | |
'replace', | |
'stylus', | |
'autoprefixer', | |
'uglify', | |
'svgmin', | |
'grunticon', | |
'imagemin', | |
'copyto', | |
'clean:post' | |
]); | |
grunt.registerTask('bump', ['bumpup', 'build']); // bump up to new version | |
grunt.registerTask('scaffold', ['mkdir']); // create basic folder structure | |
grunt.registerTask('default', ['connect', 'build', 'watch']); // work | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "projectname", | |
"version": "0.0.1", | |
"private": true, | |
"devDependencies": { | |
"grunt": "^0.4.5", | |
"grunt-autoprefixer": "^1.0.0", | |
"grunt-contrib-clean": "^0.6.0", | |
"grunt-contrib-connect": "^0.6.0", | |
"grunt-contrib-watch": "^0.5.3", | |
"grunt-copy-to": "0.0.10", | |
"grunt-includes": "^0.4.5", | |
"grunt-contrib-stylus": "^0.19.0", | |
"grunt-svgmin": "^1.0.0", | |
"grunt-grunticon": "^1.2.13", | |
"grunt-contrib-uglify": "^0.5.1", | |
"grunt-contrib-imagemin": "^0.8.1", | |
"grunt-text-replace": "^0.3.12", | |
"grunt-bumpup": "^0.6.1", | |
"grunt-mkdir": "^0.1.2" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment