我试图通过引用一个名为config.php的外部文件来将所有插件js文件连接成一个文件,该文件存储了所有所需的脚本。
但是在这样做时,遇到了一个问题,因为gulp.src函数会在fs.readFile完成读取文件并更新数组之前首先使用空数组"arrayFiles"运行。
以下是一些代码示例:
// gulp.js
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var fs = require("fs");
var arrayFiles = new Array();
gulp.task('compressAllPlugins', function(done) {
fs.readFile('path/to/config.php', {encoding: 'utf-8', flag: 'rs'}, function(e, data) {
if (e) return console.log(e);
// codes to process content and convert it into array
// arrayFiles.push(eachData);
}
console.log('arrayFiles: ',arrayFiles);
gulp.src(arrayFiles)
.pipe(plugins.uglify().on('error', standardHandler))
.pipe(concat('myplugins.min.js'))
.pipe(gulp.dest('public/app'))
.on('end', done);
});
});
以下代码展示了config.php文件的内容。
// config.php
<?php
return [
'scripts' =>[
'assets/libs/jquery/dist/jquery.min.js',
'assets/libs/angular/angular.js',
'assets/libs/angular-ui-router/release/angular-ui-router.min.js'
]
];
从上面的代码中,console.log会按照所示正确地给出数据数组:
// output
arrayFiles: ['assets/libs/jquery/dist/jquery.min.js',
'assets/libs/angular/angular.js',
'assets/libs/angular-ui-router/release/angular-ui-router.min.js']
然而,myplugins.min.js并非基于该数组生成。
问题: 如何使gulp.src在fs.readFile更新arrayFiles之后运行?或者其他解决方法?
尝试:
在gulp.task中硬编码arrayFiles,并且不使用fs.readFile将会按照插入到数组中的顺序读取相应的文件。
// gulp.js (attempt #1)
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var fs = require("fs");
var arrayFiles = new Array();
gulp.task('compressAllPlugins', function(done) {
arrayFiles =[
'public/assets/libs/jquery/dist/jquery.min.js',
'public/assets/libs/angular/angular.js',
'public/assets/libs/angular-ui-router/release/angular-ui-router.min.js'
];
gulp.src(arrayFiles)
.pipe(plugins.uglify().on('error', standardHandler))
.pipe(concat('myplugins.min.js'))
.pipe(gulp.dest('public/app'))
.on('end', done);
});
});
这段代码可以按要求生成包含所有全局变量的myplugins.min.js文件,但它没有读取我的config.php文件。