#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> |
Same here. Thanks for posting.
I can't figure how this would work for images, i.e. if a template in a subfolder references a <img src="img/logo.png"/>. How to tell usemin that templates are effectively loaded from the root path?
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
pkg: grunt.file.readJSON('package.json'), properties: grunt.file.readJSON('properties.json'),
new file properties.json
{ "fonts" : "bower_components/bootstrap/dist/fonts", "php" : "app/", "css" : "app/css", "view" : "app/php/view/", "controller" : "app/php/controller/", "service" : "app/php/service/", "model" : "app/php/model/", "util" : "app/php/util/", "src" : "app", "dist" : "dist" } /\* put files not handled in other tasks here _/ copy: { dist: { files: [{ expand: true, dot: true, cwd: '<%= properties .src %>', dest: '<%= properties .dist %>', src: ['_.txt', '.htaccess'] }, { /\* fonts bootstrap _/ expand: true, dot: true, cwd: '<%= properties .fonts %>', dest: '<%= properties .dist %>/fonts', src: ['_.ttf', '*.woff'] } .....
This and the related usemin issue helped me solve a similar problem. Thanks.