gunrt-contrib-copy переименование расширений файлов

у меня есть каталог и несколько подкаталогов, поэтому, когда я ищу свои файлы, я использую шаблон подстановки, например

'src/**/*.js'

проблема в том, что я хочу переименовать расширение в .old.js

загвоздка в том, что мне нужно, чтобы файл .old.js был переименован и оставался в каталоге, в котором он был найден, но мне не ясно, как это достигается.

Я пробовал разные вещи, и пока единственное, что сработало, - это посмотреть на каждый каталог отдельно в отдельной задаче копирования, что на самом деле не то, что я хочу делать.

У кого-нибудь есть другой подход?


person user1383163    schedule 16.02.2017    source источник
comment
файлы .old.js необходимо скопировать в ту же папку, что и их исходные аналоги .js, и файлы old.js уже не существуют.   -  person user1383163    schedule 17.02.2017


Ответы (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'
    ]);

};

Результирующая структура каталогов (пример 1)

После запуска $ grunt через интерфейс командной строки с использованием 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'
    ]);

};

Результирующая структура каталогов (пример 2)

На этот раз после запуска $ 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
person RobC    schedule 17.02.2017