7

Sto scrivendo uno script Gruntjs che dovrebbeGruntjs: sostituire modelli quando si copia un file

  • concatenate + sostituire modello di alcuni file JS nella directory di destinazione (contrib-concat)
  • copie + sostituisco modello di alcuni altri file (contrib-copy)
  • pacchetto i file in un file zip

contrib-concat ha un valore booleano opzione processo per sostituire modelli (come <% pkg.version %>) durante l'elaborazione dei file.

contrib-copy ha anche un'opzione processContent, tuttavia non so come attivare l'elaborazione dei modelli con questa opzione.

module.exports = function(grunt) { 

    grunt.initConfig({ 
     meta: { 
      banner: ' \ 
/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n \ 
* <%= pkg.homepage %>\n \ 
*/\n\n', 
      build_date: '<%= grunt.template.today("yyyy-mm-dd") %>', 
      build_num: process.env.BUILD_NUMBER || 0, // Jenkins build number if available 
      version_string: '<%= pkg.version %>-<%= meta.build_num %>', 
      dist_dir: 'dist/<%= pkg.version %>' 
     }, 
     pkg: grunt.file.readJSON('package.json'), 
     concat: { 
      options: { 
       stripBanners: { 
        block: true 
       }, 
       process: true, 
       separator: '\n /* ----- */ \n', 
       banner: '<%= meta.banner %>' 
      }, 
      dist: { 
       src: [ 
        'src/ViewUtility.js', 
        'src/ViewClass.js', 
        'src/ViewClass.js', 
        'src/MarksClass.js', 
        'src/ViewVersion.js'], 
       dest: 'build/View.js' 
      } 
     }, 
     uglify: { 
      options: { 
       mangle: { 
        except: ['jQuery', 'Hammer'] 
       }, 
       banner: '<%= meta.banner %>' 
      }, 
      dist: { 
       src: '<%= pkg.main %>', 
       dest: 'build/View.min.js' 
      } 
     }, 
     copy: { 
      options: { 
       processContent: true 
      }, 
      dist: { 
       files: [ 
        {expand: true, cwd: 'build/', src: ['**'], dest: '<%= meta.dist_dir %>/view/'}, 
        {expand: true, cwd: 'src/', src: ['View-tp.js'], dest: '<%= meta.dist_dir %>/view/'}, 
        {expand: true, cwd: 'src/', src: ['plugin.json'], dest: '<%= meta.dist_dir %>/'} 
       ] 
      } 
     }, 
     compress: { 
      dist: { 
       options: { 
        archive: 'view_' + '<%= meta.version_string %>_<%= meta.build_date %>' + '.zip' 
       }, 
       expand: true, 
       cwd: 'dist/', 
       src: ['**/*'] 
      } 
     } 

    }); 

    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-contrib-concat'); 
    grunt.loadNpmTasks('grunt-contrib-copy'); 
    grunt.loadNpmTasks('grunt-contrib-compress'); 

    grunt.registerTask('default', ['concat', 'uglify', 'copy', 'compress']); 
}; 

processContent sopra non funziona. Si prega di suggerire soluzioni.

risposta

8

La struttura options.processContent è infatti una funzione. Puoi facilmente collegarlo con l'integrato process templating of grunt.

Questo snippet esegue il trucco <%= pkg.version %>.

grunt.initConfig({ 
    pkg:  grunt.file.readJSON("package.json"), 
    distdir: 'dist', 
    srcdir: 'src', 
    copy: { 
     index: { 
     options: { 
      processContent: function (content, srcpath) { 
      return grunt.template.process(content); 
      } 
     }, 
     src: '<%= srcdir %>/index.html', 
     dest: '<%= distdir %>/index.html' 
     } 
    } 
}); 
+3

Dalla versione 0.5.0 di grunt-contrib-copy, l'opzione 'processContent' viene rinominata in' process'. – TLindig

4

provare qualcosa di simile.

processContent: function(content, srcpath) { 
    content = content.replace(/^[\x20\t]+/mg, '').replace(/[\x20\t]+$/mg, ''); 
    content = content.replace(/^[\r\n]+/, '').replace(/[\r\n]+$/, ''); 
    return content; 
} 
+0

Grazie. È possibile chiamare le funzioni di sostituzione del modello "standard" da processContent? – matejk

+0

Grazie per l'esempio, @A. Questo mi ha installato e funzionante in meno di un minuto. – SimplGy

Problemi correlati