Использование Gulp для объединения и уродства файлов
Я пытаюсь использовать Gulp:
- возьмите 3 конкретных файла javascript, объедините их, а затем сохраните результат в файл (concat.js)
- возьмите этот объединенный файл и uglify / minify его, а затем сохраните результат в другой файл (uglify.js)
У меня есть следующий код до сих пор
var gulp = require('gulp'),
gp_concat = require('gulp-concat'),
gp_uglify = require('gulp-uglify');
gulp.task('js-fef', function(){
return gulp.src(['file1.js', 'file2.js', 'file3.js'])
.pipe(gp_concat('concat.js'))
.pipe(gp_uglify())
.pipe(gulp.dest('js'));
});
gulp.task('default', ['js-fef'], function(){});
однако операция uglify, похоже, не работает, или файл по какой-то причине не создается.
что мне нужно сделать так, чтобы это произошло?
6 ответов:
оказывается, мне нужно было использовать
gulp-renameа также вывести объединенный файл сначала перед "уродством". Вот код:var gulp = require('gulp'), gp_concat = require('gulp-concat'), gp_rename = require('gulp-rename'), gp_uglify = require('gulp-uglify'); gulp.task('js-fef', function(){ return gulp.src(['file1.js', 'file2.js', 'file3.js']) .pipe(gp_concat('concat.js')) .pipe(gulp.dest('dist')) .pipe(gp_rename('uglify.js')) .pipe(gp_uglify()) .pipe(gulp.dest('dist')); }); gulp.task('default', ['js-fef'], function(){});приедет из
gruntсначала это было немного запутанно, но теперь это имеет смысл. Я надеюсь, что это поможетgulpнедоносков.и, если вам нужны исходные карты, вот обновленный код:
var gulp = require('gulp'), gp_concat = require('gulp-concat'), gp_rename = require('gulp-rename'), gp_uglify = require('gulp-uglify'), gp_sourcemaps = require('gulp-sourcemaps'); gulp.task('js-fef', function(){ return gulp.src(['file1.js', 'file2.js', 'file3.js']) .pipe(gp_sourcemaps.init()) .pipe(gp_concat('concat.js')) .pipe(gulp.dest('dist')) .pipe(gp_rename('uglify.js')) .pipe(gp_uglify()) .pipe(gp_sourcemaps.write('./')) .pipe(gulp.dest('dist')); }); gulp.task('default', ['js-fef'], function(){});посмотреть gulp-sourcemaps для получения дополнительной информации о параметрах и конфигурации.
моя файл залпом производит финальной сборке-набор-минимум.js, надеюсь, это кому-то поможет.
//Gulpfile.js var gulp = require("gulp"); var watch = require("gulp-watch"); var concat = require("gulp-concat"); var rename = require("gulp-rename"); var uglify = require("gulp-uglify"); var del = require("del"); var minifyCSS = require("gulp-minify-css"); var copy = require("gulp-copy"); var bower = require("gulp-bower"); var sourcemaps = require("gulp-sourcemaps"); var path = { src: "bower_components/", lib: "lib/" } var config = { jquerysrc: [ path.src + "jquery/dist/jquery.js", path.src + "jquery-validation/dist/jquery.validate.js", path.src + "jquery-validation/dist/jquery.validate.unobtrusive.js" ], jquerybundle: path.lib + "jquery-bundle.js", ngsrc: [ path.src + "angular/angular.js", path.src + "angular-route/angular-route.js", path.src + "angular-resource/angular-resource.js" ], ngbundle: path.lib + "ng-bundle.js", //JavaScript files that will be combined into a Bootstrap bundle bootstrapsrc: [ path.src + "bootstrap/dist/js/bootstrap.js" ], bootstrapbundle: path.lib + "bootstrap-bundle.js" } // Synchronously delete the output script file(s) gulp.task("clean-scripts", function (cb) { del(["lib","dist"], cb); }); //Create a jquery bundled file gulp.task("jquery-bundle", ["clean-scripts", "bower-restore"], function () { return gulp.src(config.jquerysrc) .pipe(concat("jquery-bundle.js")) .pipe(gulp.dest("lib")); }); //Create a angular bundled file gulp.task("ng-bundle", ["clean-scripts", "bower-restore"], function () { return gulp.src(config.ngsrc) .pipe(concat("ng-bundle.js")) .pipe(gulp.dest("lib")); }); //Create a bootstrap bundled file gulp.task("bootstrap-bundle", ["clean-scripts", "bower-restore"], function () { return gulp.src(config.bootstrapsrc) .pipe(concat("bootstrap-bundle.js")) .pipe(gulp.dest("lib")); }); // Combine and the vendor files from bower into bundles (output to the Scripts folder) gulp.task("bundle-scripts", ["jquery-bundle", "ng-bundle", "bootstrap-bundle"], function () { }); //Restore all bower packages gulp.task("bower-restore", function () { return bower(); }); //build lib scripts gulp.task("compile-lib", ["bundle-scripts"], function () { return gulp.src("lib/*.js") .pipe(sourcemaps.init()) .pipe(concat("compiled-bundle.js")) .pipe(gulp.dest("dist")) .pipe(rename("compiled-bundle.min.js")) .pipe(uglify()) .pipe(sourcemaps.write("./")) .pipe(gulp.dest("dist")); });
решение с помощью
gulp-uglify,gulp-concatиgulp-sourcemaps. Это из проекта над которым я работаю.gulp.task('scripts', function () { return gulp.src(scripts, {base: '.'}) .pipe(plumber(plumberOptions)) .pipe(sourcemaps.init({ loadMaps: false, debug: debug, })) .pipe(gulpif(debug, wrapper({ header: fileHeader, }))) .pipe(concat('all_the_things.js', { newLine:'\n;' // the newline is needed in case the file ends with a line comment, the semi-colon is needed if the last statement wasn't terminated })) .pipe(uglify({ output: { // http://lisperator.net/uglifyjs/codegen beautify: debug, comments: debug ? true : /^!|\b(copyright|license)\b|@(preserve|license|cc_on)\b/i, }, compress: { // http://lisperator.net/uglifyjs/compress, http://davidwalsh.name/compress-uglify sequences: !debug, booleans: !debug, conditionals: !debug, hoist_funs: false, hoist_vars: debug, warnings: debug, }, mangle: !debug, outSourceMap: true, basePath: 'www', sourceRoot: '/' })) .pipe(sourcemaps.write('.', { includeContent: true, sourceRoot: '/', })) .pipe(plumber.stop()) .pipe(gulp.dest('www/js')) });это объединяет и сжимает все ваши
scripts, помещает их в файл с именемall_the_things.js. Файл будет заканчиваться специальной строкой//# sourceMappingURL=all_the_things.js.mapкоторый говорит вашему браузеру искать этот файл карты,который он также записывает.
var gulp = require('gulp'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); gulp.task('create-vendor', function () { var files = [ 'bower_components/q/q.js', 'bower_components/moment/min/moment-with-locales.min.js', 'node_modules/jstorage/jstorage.min.js' ]; return gulp.src(files) .pipe(concat('vendor.js')) .pipe(gulp.dest('scripts')) .pipe(uglify()) .pipe(gulp.dest('scripts')); });ваше решение не работает, потому что вам нужно сохранить файл после процесса concat, а затем uglify и сохранить снова. Вам не нужно переименовывать файл между concat и uglify.
10 июня 2015: Примечание автора
gulp-uglifyjs:удалено: этот плагин был внесен в черный список, поскольку он полагается на Uglify для объединения файлов вместо использования gulp-concat, что нарушает парадигму "он должен делать одно". Когда я создал этот плагин, не было никакого способа получить исходные карты для работы с gulp, однако теперь есть плагин gulp-sourcemaps, который достигает той же цели. gulp-uglifyjs по-прежнему отлично работает и дает очень детальный контроль над выполнением Uglify, я просто даю вам голову, что теперь существуют другие варианты.
18 февраля 2015:
gulp-uglifyиgulp-concatоба прекрасно работают сgulp-sourcemapsсейчас. Просто не забудьте установить
мы используем ниже конфигурации, чтобы сделать что-то подобное
var gulp = require('gulp'), async = require("async"), less = require('gulp-less'), minifyCSS = require('gulp-minify-css'), uglify = require('gulp-uglify'), concat = require('gulp-concat'), gulpDS = require("./gulpDS"), del = require('del'); // CSS & Less var jsarr = [gulpDS.jsbundle.mobile, gulpDS.jsbundle.desktop, gulpDS.jsbundle.common]; var cssarr = [gulpDS.cssbundle]; var generateJS = function() { jsarr.forEach(function(gulpDSObject) { async.map(Object.keys(gulpDSObject), function(key) { var val = gulpDSObject[key] execGulp(val, key); }); }) } var generateCSS = function() { cssarr.forEach(function(gulpDSObject) { async.map(Object.keys(gulpDSObject), function(key) { var val = gulpDSObject[key]; execCSSGulp(val, key); }) }) } var execGulp = function(arrayOfItems, dest) { var destSplit = dest.split("/"); var file = destSplit.pop(); del.sync([dest]) gulp.src(arrayOfItems) .pipe(concat(file)) .pipe(uglify()) .pipe(gulp.dest(destSplit.join("/"))); } var execCSSGulp = function(arrayOfItems, dest) { var destSplit = dest.split("/"); var file = destSplit.pop(); del.sync([dest]) gulp.src(arrayOfItems) .pipe(less()) .pipe(concat(file)) .pipe(minifyCSS()) .pipe(gulp.dest(destSplit.join("/"))); } gulp.task('css', generateCSS); gulp.task('js', generateJS); gulp.task('default', ['css', 'js']);образец файла GulpDS находится ниже:
{ jsbundle: { "mobile": { "public/javascripts/sample.min.js": ["public/javascripts/a.js", "public/javascripts/mobile/b.js"] }, "desktop": { 'public/javascripts/sample1.js': ["public/javascripts/c.js", "public/javascripts/d.js"]}, "common": { 'public/javascripts/responsive/sample2.js': ['public/javascripts/n.js'] } }, cssbundle: { "public/stylesheets/a.css": "public/stylesheets/less/a.less", } }

Comments