1

我正在尝试在 Gulp 中执行以下操作:1)将 JS 文件从指定文件夹缩小到名为“dist”的文件夹。2) 将“.min”附加到缩小的文件名。3) 为缩小的文件提供一个源图,并将它们放在一个名为“maps”的文件夹中。

我正在使用“gulp-uglify”、“gulp-rename”和“gulp-sourcemaps”。

这是我所拥有的:

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var sourcemaps = require('gulp-sourcemaps');

gulp.task('compress', function () {
    gulp.src('src/*.js')
    .pipe(sourcemaps.init())
    .pipe(uglify())
    .pipe(rename({suffix: '.min'}))
    .pipe(sourcemaps.write('../maps'))
    .pipe(gulp.dest('dist'));
});

一切都按预期工作,除了地图文件也附加了“.min”。如何将重命名限制为仅在 dist 文件夹中发生?

4

2 回答 2

2

我做了更多的挖掘并找到了解决方案。我最终将单个任务分成两个不同的任务。一旦文件在 dist 文件夹中,我就会调用“重命名”任务。我还使用 'vinyl-paths' 和 'del' 来删除重命名的文件。这是我所拥有的:

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var sourcemaps = require('gulp-sourcemaps');
var del = require('del');
var vinylPaths = require('vinyl-paths');

gulp.task('compress', ['uglify','rename']);

gulp.task('uglify', function() {
    return gulp.src('src/*.js')
    .pipe(sourcemaps.init())
    .pipe(uglify())
    .pipe(sourcemaps.write('../maps'))
    .pipe(gulp.dest('dist'));
});

gulp.task('rename', ['uglify'], function() {
    return gulp.src('dist/*.js')
    .pipe(vinylPaths(del))
    .pipe(rename({suffix: '.min'}))
    .pipe(gulp.dest('dist'));
});
于 2018-09-05T15:55:19.630 回答
0

gulp-rename通过利用将函数作为输入的能力,可以将两者组合成一个任务:

gulp.task('prod', function() {
    return gulp.src('src.js'))
        .pipe(sourcemaps.init())
        .pipe(uglify())
        .pipe(sourcemaps.write('.'))
        .pipe(rename(function(path) {
            if (!path.extname.endsWith('.map')) {
                path.basename += '.min';
                //gulp-rename with function only concats 'dirname + basename + extname'
            }
        }))
        .pipe(gulp.dest('build/_asset/js'));
});

如果文件扩展名不是 .map,该函数基本上“仅”附加 .min 后缀。输出将是src.min.jssrc.js.map

于 2018-11-15T06:34:30.280 回答