Node.js Gulp没有创建输出文件

时间:2019-06-04 07:00:33

标签: node.js file gulp

我有一个Gulp脚本来连接并最小化javascript。 它似乎可以正常工作,但不会输出合并的文件。

脚本是(完整的-包括额外的调试位):

// include plug-ins
var fs = require('fs');
var gulp = require('gulp');
var count = require('gulp-count');
var debug = require('gulp-debug');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var del = require('del');


var config = {
    src: 'dist/libraries/',
    dest: 'dist/js/',
    outputfile: 'libraries.min.js'
}

gulp.task('read', (done) =>  {
    fs.readdir(config.src, (err, items) => {
        console.log(items);
    });
    done();
});

//delete the output file(s)
gulp.task('clean', gulp.series('read'), (done) => {
    //del is an async function and not a gulp plugin (just standard nodejs)
    //It returns a promise, so make sure you return that from this task function
    //  so gulp knows when the delete is complete
    return del([config.dest + config.outputfile]);
});

// Combine and minify all files from the app folder
// This tasks depends on the clean task which means gulp will ensure that the 
// Clean task is completed before running the scripts task.
gulp.task('scripts', gulp.series('clean'), (done) => {

    //Include all js files but exclude any min.js files
    var files = [config.src + '*.js', '!' + config.src + '*.min.js'];

    return gulp.src(files)
       .pipe(debug())
       .pipe(count('## files selected'))
       .pipe(uglify())
       .pipe(concat(config.outputfile))
       .pipe(gulp.dest(config.dest));
});

//Set a default tasks
gulp.task('default', gulp.series('scripts'), (done) => { 

});

哪个会生成输出-包括用于验证的文件列表,其中包含src文件:

[07:46:25] Using gulpfile <path>\gulpfile.js
[07:46:25] Starting 'default'...
[07:46:25] Starting 'scripts'...
[07:46:25] Starting 'clean'...
[07:46:25] Starting 'read'...
[07:46:25] Finished 'read' after 996 μs
[07:46:25] Finished 'clean' after 2.73 ms
[07:46:25] Finished 'scripts' after 4.26 ms
[07:46:25] Finished 'default' after 6.9 ms
[ 'bootstrap-datetimepicker.js',
  'bootstrap.min.js',
  'chart.min.js',
  'cycle.js',
  'farbtastic.js',
  'jquery-3.2.1.min.js',
  'jquery-sortable-min.js',
  'moment.min.js',
  'ol.min.js',
  'pablo.min.js',
  'popper.min.js',
  'proj4.js',
  'promisedIndexDB.js',
  'qunit-2.6.1.js',
  'toastr.js' ]

如果我在dist/js/libraries.min.js创建一个空文件,则不会将其作为gulp任务的一部分删除,但是,如果我将对del()的调用移到gulp任务之外,则会将其删除,因此导致我假设它不像权限问题或路径问题那么简单。

知道我做错了什么吗?

PS:它位于Windows框上,并在admin cmd窗口中运行。

2 个答案:

答案 0 :(得分:1)

您为任务使用了错误的签名。正确的是:

  

task([taskName],taskFunction)

请参阅task signature

但是您的任务如下:

gulp.task('scripts', gulp.series('clean'), (done) => {   // 3 parameters

仅将其更改为:

gulp.task('scripts', gulp.series('clean', (done) => {
  ...
}));

使其有效-我对其进行了测试。因此,现在该任务只有两个参数:任务名称和函数。您的任务名称加上两个功能。

您还需要将defaultclean任务更改为此正确的签名。同样,您应该像在处理done()时一样,在任务结束时致电cb()

您的新代码使用任务功能,由于多种原因,它们比命名任务要好-但是现在您知道原始代码出了什么问题。您的scripts任务的主体从未运行过。

答案 1 :(得分:0)

我从来没有弄清楚出什么问题了,但是直接去了文档的地方,然后又重新开始(以前的版本来自一个示例)。

使用以下(更简单)的脚本。

// // include plug-ins
var gulp = require('gulp');
var count = require('gulp-count');
var debug = require('gulp-debug');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var del = require('del');

var config = {
    src: 'jspa-scada/dist/libraries/',
    dest: 'jspa-scada/dist/js/',
    outputfile: 'libraries.min.js'
}

function defaultTask(cb) {

    del([config.dest + config.outputfile]);


    // Include all js files but exclude any min.js files
    var globs = [
        config.src + '*.js',
        '!' + config.src + '*.min.js'
    ];

    return gulp.src(globs)
       .pipe(debug())
       .pipe(count('## files selected'))
       .pipe(uglify())
       .pipe(concat(config.outputfile))
       .pipe(gulp.dest(config.dest));

    cb();
}

exports.default = defaultTask