使用Gulp uglify和Concat添加自定义新行

时间:2016-03-10 21:21:49

标签: javascript gulp

我正在使用Gulp和gulp uglify和concat来创建生产JS。如何在许可证注释之前添加新行?

示例输出

/*! Version 1 */
function Test1(){}/*! Version 2 */
function Test(){}

期望的输出

/*! Version 1 */
function Test1(){}
/*! Version 2 */
function Test(){}

包含gulp序列的代码

function gulpDeploy(src, fileName, dest){
    gulp.src(src)
        .pipe(concat(fileName, {
            newLine:'\n;'
        }))
        .pipe(uglify({
            preserveComments : 'license'
        }))
        .pipe(gulp.dest(dest));
}

看起来newLine选项应该这样做,但它什么都不做..

1 个答案:

答案 0 :(得分:1)

我非常有兴趣看到仅使用uglifyconcat的替代答案来执行此操作,但使用gulp-replace进行的天真修复将是:

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

gulp.task('default', [], function() {
  gulp.src('file*.js')
    .pipe(concat('output.js', { newLine: '\n;' }))
    .pipe(uglify({ preserveComments: 'license' }))
    .pipe(replace(/(\/\*\! Version [^*]* \*\/)/g, '\n$1')) // Version-comments to new line
    .pipe(replace(/^\s*\r?\n/gm, '')) // Remove empty lines that may get left
    .pipe(gulp.dest('./build'));
});

我希望让第一个正则表达式只查找版本注释,这些注释不会在新行的开头启动(因此第二个replace调用不会需要),但似乎很难让正则表达式工作(因为负面的看起来似乎不起作用,或者我认为你可以使用(?<!^)\/\*\! Version [^*]* \*\/ to do it...