お題
新しい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って解決しないとちょっと泣きそうになる。