如何使用Gulp用不同的js连接不同的js,然后管道缩小/ uglify到不同的包?

时间:2015-11-19 12:06:17

标签: gulp gulp-concat gulp-uglify gulp-rename

我想用Gulp存档的是:

  1. 例如我正在修改editing.js
  2. 如果已更改/保存,请取出base1.jsbase2.jsbase3.js,然后按editing.js的顺序连接base1.jsbase2.jsbase3.jsediting.jsgulp.task('minify-js', function(){ gulp.src('static/src/*.js') .pipe(concat('static/src/base.js')) .pipe(uglify()) .pipe(gulp.dest('static/dist')); });
  3. 缩小并丑化他们
  4. 最后使用' editing.min.js'等扩展程序重命名此文件。

    ex1.js
  5. 在我的情况下,我有多个源文件要连接到多个捆绑文件。

    我无法归档的是重命名为我当前正在修改的文件名,例如ex1.min.jsrake db:migrate:status ,它总是捆绑在一个文件中。

    Gulp的新手,希望得到一些帮助,谢谢!!

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这样的事情应该这样做:

var concat = require('gulp-concat');

gulp.task('minify-js', function() {
  return gulp.src([ 'static/src/*.js', 'editing.js' ])
             .pipe(concat('editing.min.js'))
             .pipe(uglify())
             .pipe(gulp.dest('static/dist/'));
});

如您所见,无需重命名,因为gulp-concat已经要求您指定输出文件名。

编辑:这是另一个需要。它会监视任何.js文件的更改(包含一些排除项;而不是使用**/*.js,您可以指定源文件所在的特定目录,以限制可能的匹配数量)。当文件发生更改时,它会将base*.js个文件连接到已更改的文件,并使用已更改文件的文件名作为缩小文件名的基础(foo.jsfoo.min.js):

var gulp   = require('gulp');
var path   = require('path');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');

gulp.task('minify-js', function() {
  // Watch for changes on JS files, but exclude some of them.
  return gulp.watch([ 
    '**/*.js', 
    '!static/src/base*.js',
    '!node_modules/',
  ], function(ev) {
    // Watch for changes to the files.
    if (ev.type !== 'changed') return;

    // Determine 'minified' filename.
    var basename = path.basename(ev.path);
    var extname  = path.extname(basename);
    var minname  = basename.replace(extname, '.min' + extname);

    // Run the uglify chain.
    return gulp.src([ 'static/src/base*.js', ev.path ])
        .pipe(concat(minname))
        .pipe(uglify())
        .pipe(gulp.dest('static/dist/'));
  });
});