#The directory Structure
– Gruntfile.js
– app
|– index.php
|– js
|– css
|– templates
|– template.html
– dist
#The directory Structure
– Gruntfile.js
– app
|– index.php
|– js
|– css
|– templates
|– template.html
– dist
'use strict'; | |
var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet; | |
var mountFolder = function (connect, dir) { | |
return connect.static(require('path').resolve(dir)); | |
}; | |
// # Globbing | |
// for performance reasons we're only matching one level down: | |
// 'test/spec/{,*/}*.js' | |
// use this if you want to match all subfolders: | |
// 'test/spec/**/*.js' | |
module.exports = function (grunt) { | |
// load all grunt tasks | |
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); | |
// configurable paths | |
var yeomanConfig = { | |
app: 'app', | |
dist: 'dist' | |
}; | |
grunt.initConfig({ | |
yeoman: yeomanConfig, | |
clean: { | |
dist: ['<%= yeoman.dist %>/*'] | |
}, | |
// not used since Uglify task does concat, | |
// but still available if needed | |
/*concat: { | |
dist: {} | |
},*/ | |
/* | |
uglify: { | |
dist: {} | |
},*/ | |
rev: { | |
dist: { | |
files: { | |
src: [ | |
'<%= yeoman.dist %>/scripts/*.js', | |
'<%= yeoman.dist %>/styles/*.css', | |
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}', | |
'<%= yeoman.dist %>/styles/fonts/*' | |
] | |
} | |
} | |
}, | |
useminPrepare: { | |
html: '<%= yeoman.app %>/templates/template.php', | |
options: { | |
dest: '<%= yeoman.dist %>' | |
} | |
}, | |
usemin: { | |
html: ['<%= yeoman.dist %>/templates/{,*/}*.php'], | |
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], | |
options: { | |
basedir: '<%= yeoman.dist %>', | |
dirs: ['<%= yeoman.dist %>/**/*'] | |
} | |
}, | |
cssmin: { | |
dist: { | |
files: { | |
'<%= yeoman.dist %>/styles/main.css': [ | |
'.tmp/styles/{,*/}*.css', | |
'<%= yeoman.app %>/styles/{,*/}*.css' | |
] | |
} | |
} | |
}, | |
htmlmin: { | |
dist: { | |
options: { | |
/*removeCommentsFromCDATA: true, | |
// https://github.com/yeoman/grunt-usemin/issues/44 | |
//collapseWhitespace: true, | |
collapseBooleanAttributes: true, | |
removeAttributeQuotes: true, | |
removeRedundantAttributes: true, | |
useShortDoctype: true, | |
removeEmptyAttributes: true, | |
removeOptionalTags: true*/ | |
}, | |
files: [{ | |
expand: true, | |
cwd: '<%= yeoman.app %>/templates', | |
src: '*.php', | |
dest: '<%= yeoman.dist %>/templates' | |
}] | |
} | |
}, | |
copy: { | |
dist: { | |
files: [{ | |
expand: true, | |
dot: true, | |
cwd: '<%= yeoman.app %>', | |
dest: '<%= yeoman.dist %>', | |
src: [ | |
'*.{ico,txt}', | |
'.htaccess' | |
] | |
}] | |
} | |
}, | |
}); | |
grunt.renameTask('regarde', 'watch'); | |
grunt.registerTask('build', [ | |
'clean:dist', | |
'useminPrepare', | |
'htmlmin', | |
'concat', | |
'cssmin', | |
'uglify', | |
'copy', | |
'rev', | |
'usemin' | |
]); | |
grunt.registerTask('default', [ | |
'build' | |
]); | |
}; |
<!doctype html> | |
<head> | |
<meta charset="utf-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | |
<title>Hello World!</title> | |
<link rel="stylesheet" href="styles/main.css"> | |
<!-- build:js(app) scripts/vendor/modernizr.js --> | |
<script src="components/modernizr/modernizr.js"></script> | |
<!-- endbuild --> | |
</head> | |
<body> | |
<h1>Hello World!</h1> | |
<!-- build:js(app) scripts/main.js --> | |
<script src="components/jquery/jquery.js"></script> | |
<script src="scripts/script1.js"></script> | |
<!-- endbuild --> | |
<!-- build:js(app) scripts/plugins.js --> | |
<script src="components/script2.js"></script> | |
<script src="components/script3.js"></script> | |
<!-- endbuild --> | |
</body> | |
</html> |
is possible to create another file, and declare variables that it can then be used in gruntfile.js file. mapping your project and creating folders and subfolders.
declare in gruntfile.js
new file properties.json