Сначала загружать рекурсивные файлы grunt concat

Мне нужно рекурсивно конкатрировать файлы JavaScript, содержащиеся в каталоге, но при этом добавлять файлы в текущую директорию, прежде чем копаться в других содержащихся каталогах, например:

src/
 - module1/
    - config.js
    - index.js
 - module2/
    - index.js
 - main.js

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

// get all module directories
    grunt.file.expand("src/*").forEach(function (dir) {
        // get the module name from the directory name
        var dirName = dir.substr(dir.lastIndexOf('/') + 1);

        // create a subtask for each module, find all src files
        // and combine into a single js file per module
        concat.main.src.push(dir + '/**/*.js');
    });

    console.log(concat.main.src);

но когда я проверяю на concat.main.src, тогда заказ не так, как мне нужно:

//console.log output
['src/module1/**/*.js',
 'src/module2/**/*.js',
 'src/main.js']

Мне нужен порядок:

['src/main.js',
 'src/module1/**/*.js',
 'src/module2/**/*.js']

Любые идеи о том, как я могу это достичь?

javascript,sorting,gruntjs,concat,

0

Ответов: 2


1

Быстрое исправление было бы переименовать main.js в app.js, поскольку он обрабатывает в алфавитном порядке.

Но если вы хотите сохранить main.js, попробуйте сначала нажать его в массив. Затем, если вы измените glob для расширения файла, чтобы посмотреть только подкаталоги src, тогда он пропустит main.js и продолжит добавлять ваши модули в массив

concat.main.src.push('src/main.js');
// get all module directories
grunt.file.expand("src/**").forEach(function (dir) {
    // get the module name from the directory name
    var dirName = dir.substr(dir.lastIndexOf('/') + 1);

    // create a subtask for each module, find all src files
    // and combine into a single js file per module
    concat.main.src.push(dir + '/**/*.js');
});

console.log(concat.main.src);

0 принят

большое спасибо!!!

Моя голова стала ясной после душа и более подробно рассмотрела документацию в Grunts, я нашел решение, которое позволяет здесь другим, кто может быть заинтересован. Он использует grunt.file.recurse вместо grunt.file.expand.

var sourceSet = [];
grunt.file.recurse("src/main/", function callback(abspath, rootdir, subdir, filename) {
    sourceSet.push(abspath);
});

concat.main.src = concat.main.src.concat(sourceSet.sort());

Теперь работает отлично !!!

JavaScript, сортировка, gruntjs, CONCAT,
Похожие вопросы