2013-10-29 37 views
0

我正在使用基本的yeoman web應用程序模板和requirejs,現在我想構建它。但是,我不想讓grunt將每個模塊連接成一個文件(優化方式)。yeoman/grunt和requirejs - 不連接(優化)輸出

我該如何阻止它做到這一點,並自行復制所有模塊?

我Gruntfile.js:

// Generated on 2013-10-23 using generator-webapp 0.4.3 
'use strict'; 

// # Globbing 
// for performance reasons we're only matching one level down: 
// 'test/spec/{,*/}*.js' 
// use this if you want to recursively match all subfolders: 
// 'test/spec/**/*.js' 

module.exports = function (grunt) { 
    // show elapsed time at the end 
    require('time-grunt')(grunt); 
    // load all grunt tasks 
    require('load-grunt-tasks')(grunt); 

    grunt.initConfig({ 
     // configurable paths 
     yeoman: { 
      app: 'app', 
      dist: 'dist' 
     }, 
     watch: { 
      coffee: { 
       files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'], 
       tasks: ['coffee:dist'] 
      }, 
      coffeeTest: { 
       files: ['test/spec/{,*/}*.coffee'], 
       tasks: ['coffee:test'] 
      }, 
      compass: { 
       files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], 
       tasks: ['compass:server', 'autoprefixer'] 
      }, 
      styles: { 
       files: ['<%= yeoman.app %>/styles/{,*/}*.css'], 
       tasks: ['copy:styles', 'autoprefixer'] 
      }, 
      livereload: { 
       options: { 
        livereload: '<%= connect.options.livereload %>' 
       }, 
       files: [ 
        '<%= yeoman.app %>/*.html', 
        '.tmp/styles/{,*/}*.css', 
        '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js', 
        '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' 
       ] 
      } 
     }, 
     connect: { 
      options: { 
       port: 9000, 
       livereload: 35729, 
       // change this to '0.0.0.0' to access the server from outside 
       hostname: 'localhost' 
      }, 
      livereload: { 
       options: { 
        open: true, 
        base: [ 
         '.tmp', 
         '<%= yeoman.app %>' 
        ] 
       } 
      }, 
      test: { 
       options: { 
        base: [ 
         '.tmp', 
         'test', 
         '<%= yeoman.app %>' 
        ] 
       } 
      }, 
      dist: { 
       options: { 
        open: true, 
        base: '<%= yeoman.dist %>' 
       } 
      } 
     }, 
     clean: { 
      dist: { 
       files: [{ 
        dot: true, 
        src: [ 
         '.tmp', 
         '<%= yeoman.dist %>/*', 
         '!<%= yeoman.dist %>/.git*' 
        ] 
       }] 
      }, 
      server: '.tmp' 
     }, 
     jshint: { 
      options: { 
       jshintrc: '.jshintrc' 
      }, 
      all: [ 
       'Gruntfile.js', 
       '<%= yeoman.app %>/scripts/{,*/}*.js', 
       '!<%= yeoman.app %>/scripts/vendor/*', 
       'test/spec/{,*/}*.js' 
      ] 
     }, 
     mocha: { 
      all: { 
       options: { 
        run: true, 
        urls: ['http://<%= connect.test.options.hostname %>:<%= connect.test.options.port %>/index.html'] 
       } 
      } 
     }, 
     coffee: { 
      options: { 
       bare: true 
      }, 
      dist: { 
       files: [{ 
        expand: true, 
        cwd: '<%= yeoman.app %>/scripts', 
        src: '{,*/}*.coffee', 
        dest: '.tmp/scripts', 
        ext: '.js' 
       }] 
      }, 
      test: { 
       files: [{ 
        expand: true, 
        cwd: 'test/spec', 
        src: '{,*/}*.coffee', 
        dest: '.tmp/spec', 
        ext: '.js' 
       }] 
      } 
     }, 
     compass: { 
      options: { 
       require: 'susy', 
       sassDir: '<%= yeoman.app %>/styles', 
       cssDir: '.tmp/styles', 
       generatedImagesDir: '.tmp/images/generated', 
       imagesDir: '<%= yeoman.app %>/images', 
       javascriptsDir: '<%= yeoman.app %>/scripts', 
       fontsDir: '<%= yeoman.app %>/styles/fonts', 
       importPath: '<%= yeoman.app %>/bower_components', 
       httpImagesPath: '/images', 
       httpGeneratedImagesPath: '/images/generated', 
       httpFontsPath: '/styles/fonts', 
       relativeAssets: false, 
       assetCacheBuster: false 
      }, 
      dist: { 
       options: { 
        generatedImagesDir: '<%= yeoman.dist %>/images/generated' 
       } 
      }, 
      server: { 
       options: { 
        debugInfo: true 
       } 
      } 
     }, 
     autoprefixer: { 
      options: { 
       browsers: ['last 1 version'] 
      }, 
      dist: { 
       files: [{ 
        expand: true, 
        cwd: '.tmp/styles/', 
        src: '{,*/}*.css', 
        dest: '.tmp/styles/' 
       }] 
      } 
     }, 
     // not used since Uglify task does concat, 
     // but still available if needed 
     /*concat: { 
      dist: {} 
     },*/ 
     requirejs: { 
      dist: { 
       // Options: https://github.com/jrburke/r.js/blob/master/build/example.build.js 
       options: { 
        // `name` and `out` is set by grunt-usemin 
        baseUrl: '<%= yeoman.app %>/scripts', 
        optimize: 'uglify2', // uglify, uglify2, closure, closure.keepLines, none 
        // TODO: Figure out how to make sourcemaps work with grunt-usemin 
        // https://github.com/yeoman/grunt-usemin/issues/30 
        //generateSourceMaps: true, 
        // required to support SourceMaps 
        // http://requirejs.org/docs/errors.html#sourcemapcomments 
        preserveLicenseComments: false, 
        useStrict: true, 
        wrap: true 
        //uglify2: {} // https://github.com/mishoo/UglifyJS2 
       } 
      } 
     }, 
     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: { 
      options: { 
       dest: '<%= yeoman.dist %>' 
      }, 
      html: '<%= yeoman.app %>/index.html' 
     }, 
     usemin: { 
      options: { 
       dirs: ['<%= yeoman.dist %>'] 
      }, 
      html: ['<%= yeoman.dist %>/{,*/}*.html'], 
      css: ['<%= yeoman.dist %>/styles/{,*/}*.css'] 
     }, 
     imagemin: { 
      dist: { 
       files: [{ 
        expand: true, 
        cwd: '<%= yeoman.app %>/images', 
        src: '{,*/}*.{png,jpg,jpeg}', 
        dest: '<%= yeoman.dist %>/images' 
       }] 
      } 
     }, 
     svgmin: { 
      dist: { 
       files: [{ 
        expand: true, 
        cwd: '<%= yeoman.app %>/images', 
        src: '{,*/}*.svg', 
        dest: '<%= yeoman.dist %>/images' 
       }] 
      } 
     }, 
     cssmin: { 
      // This task is pre-configured if you do not wish to use Usemin 
      // blocks for your CSS. By default, the Usemin block from your 
      // `index.html` will take care of minification, e.g. 
      // 
      //  <!-- build:css({.tmp,app}) styles/main.css --> 
      // 
      // 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 %>', 
        src: '*.html', 
        dest: '<%= yeoman.dist %>' 
       }] 
      } 
     }, 
     // Put files not handled in other tasks here 
     copy: { 
      dist: { 
       files: [{ 
        expand: true, 
        dot: true, 
        cwd: '<%= yeoman.app %>', 
        dest: '<%= yeoman.dist %>', 
        src: [ 
         '*.{ico,png,txt}', 
         '.htaccess', 
         'images/{,*/}*.{webp,gif}', 
         'styles/fonts/{,*/}*.*', 
         'bower_components/sass-bootstrap/fonts/*.*' 
        ] 
       }] 
      }, 
      styles: { 
       expand: true, 
       dot: true, 
       cwd: '<%= yeoman.app %>/styles', 
       dest: '.tmp/styles/', 
       src: '{,*/}*.css' 
      } 
     }, 
     modernizr: { 
      devFile: '<%= yeoman.app %>/bower_components/modernizr/modernizr.js', 
      outputFile: '<%= yeoman.dist %>/bower_components/modernizr/modernizr.js', 
      files: [ 
       '<%= yeoman.dist %>/scripts/{,*/}*.js', 
       '<%= yeoman.dist %>/styles/{,*/}*.css', 
       '!<%= yeoman.dist %>/scripts/vendor/*' 
      ], 
      uglify: true 
     }, 
     concurrent: { 
      server: [ 
       'compass', 
       'coffee:dist', 
       'copy:styles' 
      ], 
      test: [ 
       'coffee', 
       'copy:styles' 
      ], 
      dist: [ 
       'coffee', 
       'compass', 
       'copy:styles', 
       'imagemin', 
       'svgmin', 
       'htmlmin' 
      ] 
     }, 
     bower: { 
      options: { 
       exclude: ['modernizr'] 
      }, 
      all: { 
       rjsConfig: '<%= yeoman.app %>/scripts/main.js' 
      } 
     } 
    }); 

    grunt.registerTask('server', function (target) { 
     if (target === 'dist') { 
      return grunt.task.run(['build', 'connect:dist:keepalive']); 
     } 

     grunt.task.run([ 
      'clean:server', 
      'concurrent:server', 
      'autoprefixer', 
      'connect:livereload', 
      'watch' 
     ]); 
    }); 

    grunt.registerTask('test', [ 
     'clean:server', 
     'concurrent:test', 
     'autoprefixer', 
     'connect:test', 
     'mocha' 
    ]); 

    grunt.registerTask('build', [ 
     'clean:dist', 
     'useminPrepare', 
     'concurrent:dist', 
     'autoprefixer', 
     'requirejs', 
     'concat', 
     'cssmin', 
     'uglify', 
     'modernizr', 
     'copy:dist', 
     'rev', 
     'usemin' 
    ]); 

    grunt.registerTask('default', [ 
     'jshint', 
     'test', 
     'build' 
    ]); 
}; 

回答

0

useminPrepareusemin任務是負責串聯腳本(和樣式)。他們使用HTML註釋來確定連接/縮小的內容。

這裏的一些HTML我index.htmlgenerator-angular昨天的運行:

 <!-- build:js({.tmp,app}) scripts/scripts.js --> 
    <script src="scripts/app.js"></script> 
    <script src="scripts/controllers/main.js"></script> 
    <!-- endbuild --> 

通知的<!-- build -->怎麼樣包裹腳本?這些註釋指示usemin連接並縮小buildendbuild之間的腳本。

您可以簡單地從<script>標記中刪除<!-- build --><!-- endbuild -->評論,並且usemin不會連續縮小它們。

(您可能需要如果在運行grunt當得到醜化錯誤調整Gruntfile.js任務build。嘗試從列表中刪除uglify

0

您可以編輯您的Gruntfile的'build'任務定義以移除concat/usemin/useminprepare子任務。或者像@jevets說的那樣,從您的HTML中刪除<!-- build -->...<!-- endbuild -->評論。