如何使gulp的fs.readFileSync先获取内容,然后在gulp.src中使用其数据?

3

我试图通过引用一个名为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文件。

1个回答

0
啊,找到了我的错误:
经过多次代码审查,发现它确实读取了更新后的数组,只是被检索出来的数据中没有'public'目录,因此无法生成myplugins.min.js文件。
// gulp.js

arrayFiles.push('public/'+eachData);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接