Gulp uglify, переименование и исходные карты

Я пытаюсь сделать в Gulp следующее: 1) Сократить файлы JS из указанной папки в папку с именем «dist». 2) Добавьте «.min» к минифицированным именам файлов. 3) Предоставьте исходную карту для минифицированных файлов и поместите их в папку с именем «карты».

Я использую «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?


person Tim    schedule 04.09.2018    source источник
comment
добавьте этот '!src/*.map' в src => gulp.src('src/*.js','!src/*.map')   -  person matio    schedule 05.09.2018
comment
@matio, папки «src», «dist» и «maps» находятся на корневом уровне. Файлы JS из «src» правильно извлекаются в папку «dist», создается папка карт и добавляется файл карт. В папке «src» нет файлов .map, которые я мог бы исключить.   -  person Tim    schedule 05.09.2018


Ответы (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'));
});
person Tim    schedule 05.09.2018

Можно объединить две задачи в одну, используя способность 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'));
});

Функция в основном «только» добавляет суффикс .min, если имя расширения файла не .map. Выходные данные будут src.min.js и src.js.map.

person yongtw123    schedule 15.11.2018