7

BenGruntjs: Bir dosya

  • concatenate + hedef dizinine (contrib-concat) bazı JS dosyaları şablonu değiştirmek gereken bir Gruntjs senaryoyu yazıyorum
  • kopya + bazılarının şablonunu değiştirmek kopyalarken şablonları yerine diğer dosyaları (contrib kopya)
  • paket bir zip dosyasına dosyaları

contrib-concat bir boolean seçenek süreç yerine gelmiştir dosyaları işlerken (<% pkg.version %> gibi) şablonlar.

contrib-copy bir seçenek de processContent seçeneğine sahiptir, ancak bu seçenekle şablon işlemeyi nasıl tetikleyeceğimi bilmiyorum.

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 yukarıda çalışmaz. Lütfen çözümler öner.

cevap

8

options.processContent özelliği gerçekten fonksiyonu olup. Yerleşik process templating of grunt ile kolayca bağlayabilirsiniz.

Bu kod parçacığı sizin <%= pkg.version %> numarandır.

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

Grunt-contrib-copy'in 0.5.0 sürümünden bu yana, 'processContent' seçeneği 'process' olarak yeniden adlandırılır. – TLindig

4

Böyle bir şey deneyin.

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

Teşekkürler. ProcessContent'ten "standart" şablon değiştirme işlevlerini çağırmak mümkün mü? – matejk

+0

Örnek için teşekkürler @ A. Bu beni bir dakikadan az bir sürede çalıştırdı. – SimplGy