我有一个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窗口中运行。
答案 0 :(得分:1)
您为任务使用了错误的签名。正确的是:
task([taskName],taskFunction)
但是您的任务如下:
gulp.task('scripts', gulp.series('clean'), (done) => { // 3 parameters
仅将其更改为:
gulp.task('scripts', gulp.series('clean', (done) => {
...
}));
使其有效-我对其进行了测试。因此,现在该任务只有两个参数:任务名称和函数。您的任务名称加上两个功能。
您还需要将default
和clean
任务更改为此正确的签名。同样,您应该像在处理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