LoginSignup
6

More than 5 years have passed since last update.

posted at

updated at

gulp-uglifyでコメントを残す方法が変わったの?

お題

新しいPCにgulp周り一式を導入したところ、ライセンスコメントを残すところで引っかかったのでメモ。

ライセンスコメントを残すには

今まで

gulpfile.js
// ggっても大体こんな感じ
gulp.task('uglify', function() {
    return gulp.src('./dev/app.js')
        .pipe(plumber())
        .pipe(uglify({preserveComments: 'some'}))
        .pipe(rename('app.min.js'))
        .pipe(gulp.dest('./'));
});

↓ 実行したら

GulpUglifyError: unable to minify JavaScript
Caused by: DefaultsError: `preserveComments` is not a supported option

怒られた。

どうなってるの!

2017/6/22時点でgulp-uglifyをインストールすると、
https://github.com/mishoo/UglifyJS2
がついてくるらしい。
ちゃんと読んでないけど、もしかしてつい最近切り替わったんだろうか?

usageを見てみると、コマンドラインで実行する場合
コメントを残したりは--comments オプションでやるらしい。
実際に

uglifyjs --compress --mangle --comments -o app.min.js -- app.js

を実行すると、きちんとライセンスコメントが残ったまま書き出される。

じゃあ

gulpfile.js
gulp.task('uglify', function() {
    return gulp.src('./dev/app.js')
        .pipe(plumber())
        .pipe(uglify({comments: 'some'})) // キーを変えた
        .pipe(rename('app.min.js'))
        .pipe(gulp.dest('./'));
});

↓ 実行したら

GulpUglifyError: unable to minify JavaScript
Caused by: DefaultsError: `comments` is not a supported option

怒られた。

どうなってるの!!

コマンドラインは動いているので、コマンドラインの際の実行ファイルを見てみる。

uglifyjs-line.82
if (program.comments) {
    if (typeof options.output != "object") options.output = {};
    options.output.comments = typeof program.comments == "string" ? program.comments : "some";
}

outputオブジェクトのメンバになってるじゃないですか…

これでどうだ

gulpfile.js
gulp.task('uglify', function() {
    return gulp.src('./dev/app.js')
        .pipe(plumber())
        .pipe(uglify({output: {comments: 'some'}})) // outputオブジェクトの中に入れた
        .pipe(rename('app.min.js'))
        .pipe(gulp.dest('./'));
});

↓ 実行したら

怒られなかった!

まとめ

ggって解決しないとちょっと泣きそうになる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6