Note that there are some explanatory texts on larger screens.

plurals
  1. POGrunt usemin: concatenated JavaScript file not created
    text
    copied!<p>I am using the <em>usemin</em> task in my Yeoman generator. In the HTML it looks like it has worked fine as the separate JavaScript files are replaced by a link to a single file. However, the file that is being referenced to has not been created. Am I missing a setting?</p> <p><strong>Gruntfile.js</strong></p> <pre><code>'use strict'; module.exports = function (grunt) { // load all grunt tasks require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); // configurable paths var yeomanConfig = { app: 'app', dev: 'dev', dist: 'dist' }; grunt.initConfig({ yeoman: yeomanConfig, clean: { dist: { files: [{ dot: true, src: [ '.tmp', '&lt;%%= yeoman.dist %&gt;/*', '!&lt;%%= yeoman.dist %&gt;/.git*' ] }] } }, copy: { dev: { files: [ {expand: true, cwd: '&lt;%%= yeoman.app %&gt;', src: ['**', '!**/scss/**'], dest: '&lt;%%= yeoman.dev %&gt;'}, {expand: true, cwd: '&lt;%%= yeoman.app %&gt;/assets/scss/fonts', src: ['**'], dest: '&lt;%%= yeoman.dev %&gt;/assets/css/fonts'}, {expand: true, cwd: '&lt;%%= yeoman.app %&gt;/assets/bower_components/jquery', src: ['jquery.min.js'], dest: '&lt;%%= yeoman.dev %&gt;/assets/js/lib', rename: function (dest) { var jQConf = grunt.file.readJSON('app/assets/bower_components/jquery/bower.json'); return dest + '/jquery-' + jQConf.version + '.min.js'; }}, {expand: true, cwd: '&lt;%%= yeoman.app %&gt;/assets/bower_components/jquery-legacy', src: ['jquery.min.js'], dest: '&lt;%%= yeoman.dev %&gt;/assets/js/lib', rename: function (dest) { var jQLegConf = grunt.file.readJSON('app/assets/bower_components/jquery-legacy/.bower.json'); return dest + '/jquery-' + jQLegConf.version + '.min.js'; }}, // Only copy over the unminified migrate plugin {expand: true, cwd: '&lt;%%= yeoman.app %&gt;/assets/bower_components/jquery-migrate', src: ['jquery-migrate.js'], dest: '&lt;%%= yeoman.dev %&gt;/assets/js/lib', rename: function (dest) { var jqMigConf = grunt.file.readJSON('app/assets/bower_components/jquery-migrate/.bower.json'); return dest + '/jquery-migrate-' + jqMigConf.version + '.js'; }} ] }, dist: { files: [ {expand: true, cwd: '&lt;%%= yeoman.app %&gt;', src: ['**', '!**/scss/**', '!**/js/*.js', '!**/bower_components/**'], dest: '&lt;%%= yeoman.dist %&gt;'}, {expand: true, cwd: '&lt;%%= yeoman.app %&gt;/assets/scss/fonts', src: ['**'], dest: '&lt;%%= yeoman.dist %&gt;/assets/css/fonts'}, {expand: true, cwd: '&lt;%%= yeoman.app %&gt;/assets/bower_components/jquery', src: ['jquery.min.js'], dest: '&lt;%%= yeoman.dist %&gt;/assets/js/lib', rename: function (dest) { var jQConf = grunt.file.readJSON('app/assets/bower_components/jquery/bower.json'); return dest + '/jquery-' + jQConf.version + '.min.js'; }}, {expand: true, cwd: '&lt;%%= yeoman.app %&gt;/assets/bower_components/jquery-legacy', src: ['jquery.min.js'], dest: '&lt;%%= yeoman.dist %&gt;/assets/js/lib', rename: function (dest) { var jQLegConf = grunt.file.readJSON('app/assets/bower_components/jquery-legacy/.bower.json'); return dest + '/jquery-' + jQLegConf.version + '.min.js'; }}, // Only copy over the minified migrate plugin {expand: true, cwd: '&lt;%%= yeoman.app %&gt;/assets/bower_components/jquery-migrate', src: ['jquery-migrate.min.js'], dest: '&lt;%%= yeoman.dist %&gt;/assets/js/lib', rename: function (dest) { var jqMigConf = grunt.file.readJSON('app/assets/bower_components/jquery-migrate/.bower.json'); return dest + '/jquery-migrate-' + jqMigConf.version + '.min.js'; }} ] } }, compass: { dev: { options: { sassDir: '&lt;%%= yeoman.app %&gt;/assets/scss', cssDir: '&lt;%%= yeoman.dev %&gt;/assets/css', environment: 'development' } }, dist: { options: { sassDir: '&lt;%%= yeoman.app %&gt;/assets/scss', cssDir: '&lt;%%= yeoman.dist %&gt;/assets/css', environment: 'production' } } }, replace: { dev: { options: { patterns: [{ match: '/@jquery-migrate-local/g', replacement: function () { var jQMigConf = grunt.file.readJSON('app/assets/bower_components/jquery-migrate/.bower.json'); return 'assets/js/lib/jquery-migrate-' + jQMigConf.version + '.js'; }, expression: true }] } }, dist: { options: { patterns: [{ match: '/@jquery-cdn/g', replacement: function () { var jQConf = grunt.file.readJSON('app/assets/bower_components/jquery/bower.json'); return '//ajax.googleapis.com/ajax/libs/jquery/' + jQConf.version + '/jquery.min.js'; }, expression: true }, { match: '/@jquery-legacy-cdn/g', replacement: function () { var jQLegConf = grunt.file.readJSON('app/assets/bower_components/jquery-legacy/bower.json'); return '//ajax.googleapis.com/ajax/libs/jquery/' + jQLegConf.version + '/jquery.min.js'; }, expression: true }, { match: '/@jquery-local/g', replacement: function () { var jQConf = grunt.file.readJSON('app/assets/bower_components/jquery/bower.json'); return 'assets/js/lib/jquery-' + jQConf.version + '.min.js'; }, expression: true }, { match: '/@jquery-legacy-local/g', replacement: function () { var jQLegConf = grunt.file.readJSON('app/assets/bower_components/jquery-legacy/bower.json'); return 'assets/js/lib/jquery-' + jQLegConf.version + '.min.js'; }, expression: true }, { match: '/@jquery-migrate-local/g', replacement: function () { var jQMigConf = grunt.file.readJSON('app/assets/bower_components/jquery-migrate/.bower.json'); return 'assets/js/lib/jquery-migrate-' + jQMigConf.version + '.min.js'; }, expression: true }] }, files: [ {src: ['app/index.html'], dest: 'app/index.html'} ] } }, processhtml: { dev: { files: { '&lt;%%= yeoman.dev %&gt;/index.html': ['&lt;%%= yeoman.app %&gt;/index.html'] } }, dist: { options: { data: { message: '.min' } }, files: { '&lt;%%= yeoman.dist %&gt;/index.html': ['&lt;%%= yeoman.app %&gt;/index.html'] } } }, useminPrepare: { html: '&lt;%%= yeoman.app %&gt;/index.html', options: { dest: '&lt;%= yeoman.dist %&gt;' } }, usemin: { options: { dirs: ['&lt;%%= yeoman.dist %&gt;'] }, html: ['**/*.html'], css: ['**/*.css'] } }); grunt.registerTask('server', []); grunt.registerTask('dev', [ 'clean', 'copy:dev', 'compass:dev', 'replace' ]); grunt.registerTask('build', [ 'clean', 'copy:dist', 'compass:dist', 'replace:dist', 'useminPrepare', 'usemin' ]); }; </code></pre> <p><strong>index.html</strong></p> <pre><code>&lt;!-- build:js assets/js/main.js --&gt; &lt;script src="assets/js/variables.js"&gt;&lt;/script&gt; &lt;script src="assets/js/functions.js"&gt;&lt;/script&gt; &lt;script src="assets/js/script.js"&gt;&lt;/script&gt; &lt;script src="assets/js/events.js"&gt;&lt;/script&gt; &lt;!-- endbuild --&gt; </code></pre> <p><strong>terminal process message</strong></p> <pre><code>Running "useminPrepare:html" (useminPrepare) task Going through app/index.html to update the config Looking for build script HTML comment blocks Found a block: &lt;!-- build:js assets/js/lteie8.main.js --&gt; &lt;script src="assets/bower_components/selectivizr/selectivizr.js"&gt;&lt;/script&gt; &lt;script src="assets/bower_components/respond/respond.src.js"&gt;&lt;/script&gt; &lt;!-- endbuild --&gt; Updating config with the following assets: - app/assets/bower_components/selectivizr/selectivizr.js - app/assets/bower_components/respond/respond.src.js Found a block: &lt;!-- build:js assets/js/main.js --&gt; &lt;script src="assets/js/variables.js"&gt;&lt;/script&gt; &lt;script src="assets/js/functions.js"&gt;&lt;/script&gt; &lt;script src="assets/js/script.js"&gt;&lt;/script&gt; &lt;script src="assets/js/events.js"&gt;&lt;/script&gt; &lt;!-- endbuild --&gt; Updating config with the following assets: - app/assets/js/variables.js - app/assets/js/functions.js - app/assets/js/script.js - app/assets/js/events.js Configuration is now: cssmin: {} concat: { 'dist/assets/js/lteie8.main.js': [ 'app/assets/bower_components/selectivizr/selectivizr.js', 'app/assets/bower_components/respond/respond.src.js' ], 'dist/assets/js/main.js': [ 'app/assets/js/variables.js', 'app/assets/js/functions.js', 'app/assets/js/script.js', 'app/assets/js/events.js' ] } uglify: { 'dist/assets/js/lteie8.main.js': 'dist/assets/js/lteie8.main.js', 'dist/assets/js/main.js': 'dist/assets/js/main.js' } requirejs: {} </code></pre> <p>Results in (HTML): <code>&lt;script src="assets/js/main.js"&gt;&lt;/script&gt;</code> but no <em>main.js</em> file created</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload