gunrt-contrib-copy重命名文件扩展名

时间:2017-02-16 15:47:58

标签: file gruntjs rename grunt-contrib-copy

我有一个目录和一些子目录所以当我查找我的文件时,我使用像

这样的通配模式
'src/**/*.js'

问题是我想将扩展名重命名为.old.js

障碍是我需要重命名.old.js文件并保留在找到的目录中,但我不清楚这是如何实现的。

我尝试过各种各样的东西,到目前为止,唯一有效的方法是分别在一个单独的复制任务中查看每个目录,这不是我想要做的。

有没有其他方法?

1 个答案:

答案 0 :(得分:1)

初始目录结构

考虑以下虚构目录结构:

src
├── 1.js
├── 2.js
└── a
    ├── 3.js
    ├── 4.js
    └── b
        ├── 5.js
        ├── 6.js
        └── c
            ├── 7.js
            └── 8.js

示例一

<强> Gruntfile.js

您可以按如下方式配置grunt-contrib-copy任务:

module.exports = function(grunt) {

    grunt.initConfig({

        copy: {
            js: {
                files: [{
                    expand: true,
                    dot: true,
                    cwd: 'src',
                    dest: 'src/',
                    src: [
                        '**/*.js'
                    ],
                    rename: function(dest, src) {
                        return dest + src.replace('.js', '.old.js');
                    }
                }]
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-copy');

    grunt.registerTask('default', [
        'copy:js'
    ]);

};

结果目录结构(示例一)

使用如上所示配置的$ grunt通过CLI运行Gruntfile.js将导致以下结果:

(注意:每个原始.js文件已复制到同一文件夹位置并添加了.old.js扩展名

src
├── 1.js
├── 1.old.js
├── 2.js
├── 2.old.js
└── a
    ├── 3.js
    ├── 3.old.js
    ├── 4.js
    ├── 4.old.js
    └── b
        ├── 5.js
        ├── 5.old.js
        ├── 6.js
        ├── 6.old.js
        └── c
            ├── 7.js
            ├── 7.old.js
            ├── 8.js
            └── 8.old.js

示例2

如果您不想保留原始.js文件,那么您还需要使用grunt-contrib-clean删除原件。

<强> Gruntfile.js

module.exports = function(grunt) {

    grunt.initConfig({

        copy: {
            js: {
                files: [{
                    expand: true,
                    dot: true,
                    cwd: 'src',
                    dest: 'src/',
                    src: [
                        '**/*.js'
                    ],
                    rename: function(dest, src) {
                        return dest + src.replace('.js', '.old.js');
                    }
                }]
            }
        },

        clean: {
            originaljs: [
                'src/**/*.js',
                '!src/**/*.old.js'
            ]
        }

    });

    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-clean');

    grunt.registerTask('default', [
        'copy:js',
        'clean:originaljs'
    ]);

};

结果目录结构(示例二)

使用修订后的$ grunt运行Gruntfile.js后的这一次将导致以下结果:

(注意:每个原始.js都已删除,只有.old.js扩展名存在。)

src
├── 1.old.js
├── 2.old.js
└── a
    ├── 3.old.js
    ├── 4.old.js
    └── b
        ├── 5.old.js
        ├── 6.old.js
        └── c
            ├── 7.old.js
            └── 8.old.js