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

gunrt-contrib-copy renaming file extensions

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

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

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

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

我尝试了很多方法,到目前为止唯一有效的方法是在单独的复制任务中分别查看每个目录,这并不是我真正想要做的。

谁有其他方法?

初始目录结构

考虑以下虚构的目录结构:

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