Grunt concat目录首先递归文件
Grunt concat directory recursive files first
我需要递归连接目录中包含的 JavaScript 文件,但要确保在挖掘其他包含的目录之前添加当前目录中的文件,例如:
src/
- module1/
- config.js
- index.js
- module2/
- index.js
- main.js
使用 here 中提供的解决方案,我能够通过以下方式递归获取文件:
// 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']
关于如何实现此目标的任何想法?
快速解决方法是将 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);
非常感谢!!!
洗完澡后,我的头脑清醒了过来,更深入地查看了 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 文件,但要确保在挖掘其他包含的目录之前添加当前目录中的文件,例如:
src/
- module1/
- config.js
- index.js
- module2/
- index.js
- main.js
使用 here 中提供的解决方案,我能够通过以下方式递归获取文件:
// 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']
关于如何实现此目标的任何想法?
快速解决方法是将 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);
非常感谢!!!
洗完澡后,我的头脑清醒了过来,更深入地查看了 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());
现在完美运行!!!