首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gruntjs:复制文件时替换模板

Gruntjs:复制文件时替换模板
EN

Stack Overflow用户
提问于 2013-07-18 13:15:45
回答 3查看 5.7K关注 0票数 7

我正在编写一个Gruntjs脚本,它应该

  • 将一些JS文件的模板连接到目标目录(Concat)
  • 复制+替换其他一些文件的模板(控制-复制)
  • 将文件打包到压缩文件中

contrib有一个布尔选项process在处理文件时替换模板(如<% pkg.version %>)。

控制复制也有一个选项processContent,,但是我不知道如何用这个选项触发模板处理。

代码语言:javascript
复制
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不起作用。请提出解决办法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-05 07:26:01

options.processContent属性确实是一个函数。您可以轻松地将其与内置的process templating of grunt连接起来。

这段代码片段完成了您的<%= pkg.version %>技巧。

代码语言:javascript
复制
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'
      }
    }
});
票数 8
EN

Stack Overflow用户

发布于 2013-08-14 18:05:09

试试这样的东西。

代码语言:javascript
复制
processContent: function(content, srcpath) {  
    content = content.replace(/^[\x20\t]+/mg, '').replace(/[\x20\t]+$/mg, '');  
    content = content.replace(/^[\r\n]+/, '').replace(/[\r\n]+$/, '');  
    return content;  
}
票数 4
EN

Stack Overflow用户

发布于 2013-08-14 04:21:45

processContent是一种函数类型。见文档:https://github.com/gruntjs/grunt-contrib-copy#processcontent

代码语言:javascript
复制
processContent
Type: Function(content, srcpath)

This option is passed to grunt.file.copy as an advanced way to control the file contents that are copied.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17724550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档