Diff
checker
文本
文本
圖像
文檔
Excel
文件夾
Legal
Enterprise
桌面版
定價
登入
下載 Diffchecker 桌面版
比較文本
尋找兩個文字檔案之間的差異
工具
歷史
即時編輯器
摺疊未變更行
關閉換行
檢視
拆分
統一
比對精度
智能
單詞
字符
語法突出顯示
選擇語法
忽略
文字轉換
前往第一個差異
編輯輸入
Diffchecker Desktop
執行Diffchecker最安全的方式。取得Diffchecker桌面應用程式:您的差異永遠不會離開您的電腦!
取得桌面版
Untitled diff
建立於
11 年前
差異永不過期
清除
匯出
分享
解釋
0 刪除
行
總計
刪除
字符
總計
刪除
要繼續使用此功能,請升級到
Diff
checker
Pro
查看價格
292 行
全部複製
12 新增
行
總計
新增
字符
總計
新增
要繼續使用此功能,請升級到
Diff
checker
Pro
查看價格
303 行
全部複製
// ## Globals
// ## Globals
var argv = require('minimist')(process.argv.slice(2));
var argv = require('minimist')(process.argv.slice(2));
var autoprefixer = require('gulp-autoprefixer');
var autoprefixer = require('gulp-autoprefixer');
var browserSync = require('browser-sync').create();
var browserSync = require('browser-sync').create();
var changed = require('gulp-changed');
var changed = require('gulp-changed');
var concat = require('gulp-concat');
var concat = require('gulp-concat');
var flatten = require('gulp-flatten');
var flatten = require('gulp-flatten');
var gulp = require('gulp');
var gulp = require('gulp');
var gulpif = require('gulp-if');
var gulpif = require('gulp-if');
var imagemin = require('gulp-imagemin');
var imagemin = require('gulp-imagemin');
var jshint = require('gulp-jshint');
var jshint = require('gulp-jshint');
var lazypipe = require('lazypipe');
var lazypipe = require('lazypipe');
var less = require('gulp-less');
var less = require('gulp-less');
var merge = require('merge-stream');
var merge = require('merge-stream');
var minifyCss = require('gulp-minify-css');
var minifyCss = require('gulp-minify-css');
var plumber = require('gulp-plumber');
var plumber = require('gulp-plumber');
var rev = require('gulp-rev');
var rev = require('gulp-rev');
var runSequence = require('run-sequence');
var runSequence = require('run-sequence');
var sass = require('gulp-sass');
var sass = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');
var sourcemaps = require('gulp-sourcemaps');
var uglify = require('gulp-uglify');
var uglify = require('gulp-uglify');
複製
已複製
複製
已複製
var uncss = require('gulp-uncss');
var exec = require('gulp-exec');
// See https://github.com/austinpray/asset-builder
// See https://github.com/austinpray/asset-builder
var manifest = require('asset-builder')('./assets/manifest.json');
var manifest = require('asset-builder')('./assets/manifest.json');
// `path` - Paths to base asset directories. With trailing slashes.
// `path` - Paths to base asset directories. With trailing slashes.
// - `path.source` - Path to the source files. Default: `assets/`
// - `path.source` - Path to the source files. Default: `assets/`
// - `path.dist` - Path to the build directory. Default: `dist/`
// - `path.dist` - Path to the build directory. Default: `dist/`
var path = manifest.paths;
var path = manifest.paths;
// `config` - Store arbitrary configuration values here.
// `config` - Store arbitrary configuration values here.
var config = manifest.config || {};
var config = manifest.config || {};
// `globs` - These ultimately end up in their respective `gulp.src`.
// `globs` - These ultimately end up in their respective `gulp.src`.
// - `globs.js` - Array of asset-builder JS dependency objects. Example:
// - `globs.js` - Array of asset-builder JS dependency objects. Example:
// ```
// ```
// {type: 'js', name: 'main.js', globs: []}
// {type: 'js', name: 'main.js', globs: []}
// ```
// ```
// - `globs.css` - Array of asset-builder CSS dependency objects. Example:
// - `globs.css` - Array of asset-builder CSS dependency objects. Example:
// ```
// ```
// {type: 'css', name: 'main.css', globs: []}
// {type: 'css', name: 'main.css', globs: []}
// ```
// ```
// - `globs.fonts` - Array of font path globs.
// - `globs.fonts` - Array of font path globs.
// - `globs.images` - Array of image path globs.
// - `globs.images` - Array of image path globs.
// - `globs.bower` - Array of all the main Bower files.
// - `globs.bower` - Array of all the main Bower files.
var globs = manifest.globs;
var globs = manifest.globs;
// `project` - paths to first-party assets.
// `project` - paths to first-party assets.
// - `project.js` - Array of first-party JS assets.
// - `project.js` - Array of first-party JS assets.
// - `project.css` - Array of first-party CSS assets.
// - `project.css` - Array of first-party CSS assets.
var project = manifest.getProjectGlobs();
var project = manifest.getProjectGlobs();
// CLI options
// CLI options
var enabled = {
var enabled = {
// Enable static asset revisioning when `--production`
// Enable static asset revisioning when `--production`
rev: argv.production,
rev: argv.production,
// Disable source maps when `--production`
// Disable source maps when `--production`
maps: !argv.production,
maps: !argv.production,
// Fail styles task on error when `--production`
// Fail styles task on error when `--production`
failStyleTask: argv.production,
failStyleTask: argv.production,
// Fail due to JSHint warnings only when `--production`
// Fail due to JSHint warnings only when `--production`
failJSHint: argv.production,
failJSHint: argv.production,
// Strip debug statments from javascript when `--production`
// Strip debug statments from javascript when `--production`
複製
已複製
複製
已複製
stripJSDebug: argv.production
stripJSDebug: argv.production
,
// UnCSS when `--production`
unCss: argv.production
};
};
// Path to the compiled assets manifest in the dist directory
// Path to the compiled assets manifest in the dist directory
var revManifest = path.dist + 'assets.json';
var revManifest = path.dist + 'assets.json';
// ## Reusable Pipelines
// ## Reusable Pipelines
// See https://github.com/OverZealous/lazypipe
// See https://github.com/OverZealous/lazypipe
// ### CSS processing pipeline
// ### CSS processing pipeline
// Example
// Example
// ```
// ```
// gulp.src(cssFiles)
// gulp.src(cssFiles)
// .pipe(cssTasks('main.css')
// .pipe(cssTasks('main.css')
// .pipe(gulp.dest(path.dist + 'styles'))
// .pipe(gulp.dest(path.dist + 'styles'))
// ```
// ```
var cssTasks = function(filename) {
var cssTasks = function(filename) {
return lazypipe()
return lazypipe()
複製
已複製
複製
已複製
.pipe(exec, 'curl --silent --output sitemap.json '+manifest.config.devUrl+'?show_sitemap')
.pipe(function() {
.pipe(function() {
return gulpif(!enabled.failStyleTask, plumber());
return gulpif(!enabled.failStyleTask, plumber());
})
})
.pipe(function() {
.pipe(function() {
return gulpif(enabled.maps, sourcemaps.init());
return gulpif(enabled.maps, sourcemaps.init());
})
})
.pipe(function() {
.pipe(function() {
return gulpif('*.less', less());
return gulpif('*.less', less());
})
})
.pipe(function() {
.pipe(function() {
return gulpif('*.scss', sass({
return gulpif('*.scss', sass({
outputStyle: 'nested', // libsass doesn't support expanded yet
outputStyle: 'nested', // libsass doesn't support expanded yet
precision: 10,
precision: 10,
includePaths: ['.'],
includePaths: ['.'],
errLogToConsole: !enabled.failStyleTask
errLogToConsole: !enabled.failStyleTask
}));
}));
})
})
.pipe(concat, filename)
.pipe(concat, filename)
複製
已複製
複製
已複製
.pipe(function() {
return gulpif(enabled.unCss, uncss({
html: require('./sitemap.json')
}));
})
.pipe(autoprefixer, {
.pipe(autoprefixer, {
browsers: [
browsers: [
'last 2 versions',
'last 2 versions',
'ie 8',
'ie 8',
'ie 9',
'ie 9',
'android 2.3',
'android 2.3',
'android 4',
'android 4',
'opera 12'
'opera 12'
]
]
})
})
.pipe(minifyCss, {
.pipe(minifyCss, {
advanced: false,
advanced: false,
rebase: false
rebase: false
})
})
.pipe(function() {
.pipe(function() {
return gulpif(enabled.rev, rev());
return gulpif(enabled.rev, rev());
})
})
.pipe(function() {
.pipe(function() {
return gulpif(enabled.maps, sourcemaps.write('.', {
return gulpif(enabled.maps, sourcemaps.write('.', {
sourceRoot: 'assets/styles/'
sourceRoot: 'assets/styles/'
}));
}));
})();
})();
};
};
// ### JS processing pipeline
// ### JS processing pipeline
// Example
// Example
// ```
// ```
// gulp.src(jsFiles)
// gulp.src(jsFiles)
// .pipe(jsTasks('main.js')
// .pipe(jsTasks('main.js')
// .pipe(gulp.dest(path.dist + 'scripts'))
// .pipe(gulp.dest(path.dist + 'scripts'))
// ```
// ```
var jsTasks = function(filename) {
var jsTasks = function(filename) {
return lazypipe()
return lazypipe()
.pipe(function() {
.pipe(function() {
return gulpif(enabled.maps, sourcemaps.init());
return gulpif(enabled.maps, sourcemaps.init());
})
})
.pipe(concat, filename)
.pipe(concat, filename)
.pipe(uglify, {
.pipe(uglify, {
compress: {
compress: {
'drop_debugger': enabled.stripJSDebug
'drop_debugger': enabled.stripJSDebug
}
}
})
})
.pipe(function() {
.pipe(function() {
return gulpif(enabled.rev, rev());
return gulpif(enabled.rev, rev());
})
})
.pipe(function() {
.pipe(function() {
return gulpif(enabled.maps, sourcemaps.write('.', {
return gulpif(enabled.maps, sourcemaps.write('.', {
sourceRoot: 'assets/scripts/'
sourceRoot: 'assets/scripts/'
}));
}));
})();
})();
};
};
// ### Write to rev manifest
// ### Write to rev manifest
// If there are any revved files then write them to the rev manifest.
// If there are any revved files then write them to the rev manifest.
// See https://github.com/sindresorhus/gulp-rev
// See https://github.com/sindresorhus/gulp-rev
var writeToManifest = function(directory) {
var writeToManifest = function(directory) {
return lazypipe()
return lazypipe()
.pipe(gulp.dest, path.dist + directory)
.pipe(gulp.dest, path.dist + directory)
.pipe(browserSync.stream, {match: '**/*.{js,css}'})
.pipe(browserSync.stream, {match: '**/*.{js,css}'})
.pipe(rev.manifest, revManifest, {
.pipe(rev.manifest, revManifest, {
base: path.dist,
base: path.dist,
merge: true
merge: true
})
})
.pipe(gulp.dest, path.dist)();
.pipe(gulp.dest, path.dist)();
};
};
// ## Gulp tasks
// ## Gulp tasks
// Run `gulp -T` for a task summary
// Run `gulp -T` for a task summary
// ### Styles
// ### Styles
// `gulp styles` - Compiles, combines, and optimizes Bower CSS and project CSS.
// `gulp styles` - Compiles, combines, and optimizes Bower CSS and project CSS.
// By default this task will only log a warning if a precompiler error is
// By default this task will only log a warning if a precompiler error is
// raised. If the `--production` flag is set: this task will fail outright.
// raised. If the `--production` flag is set: this task will fail outright.
gulp.task('styles', ['wiredep'], function() {
gulp.task('styles', ['wiredep'], function() {
var merged = merge();
var merged = merge();
manifest.forEachDependency('css', function(dep) {
manifest.forEachDependency('css', function(dep) {
var cssTasksInstance = cssTasks(dep.name);
var cssTasksInstance = cssTasks(dep.name);
if (!enabled.failStyleTask) {
if (!enabled.failStyleTask) {
cssTasksInstance.on('error', function(err) {
cssTasksInstance.on('error', function(err) {
console.error(err.message);
console.error(err.message);
this.emit('end');
this.emit('end');
});
});
}
}
merged.add(gulp.src(dep.globs, {base: 'styles'})
merged.add(gulp.src(dep.globs, {base: 'styles'})
.pipe(cssTasksInstance));
.pipe(cssTasksInstance));
});
});
return merged
return merged
.pipe(writeToManifest('styles'));
.pipe(writeToManifest('styles'));
});
});
// ### Scripts
// ### Scripts
// `gulp scripts` - Runs JSHint then compiles, combines, and optimizes Bower JS
// `gulp scripts` - Runs JSHint then compiles, combines, and optimizes Bower JS
// and project JS.
// and project JS.
gulp.task('scripts', ['jshint'], function() {
gulp.task('scripts', ['jshint'], function() {
var merged = merge();
var merged = merge();
manifest.forEachDependency('js', function(dep) {
manifest.forEachDependency('js', function(dep) {
merged.add(
merged.add(
gulp.src(dep.globs, {base: 'scripts'})
gulp.src(dep.globs, {base: 'scripts'})
.pipe(jsTasks(dep.name))
.pipe(jsTasks(dep.name))
);
);
});
});
return merged
return merged
.pipe(writeToManifest('scripts'));
.pipe(writeToManifest('scripts'));
});
});
// ### Fonts
// ### Fonts
// `gulp fonts` - Grabs all the fonts and outputs them in a flattened directory
// `gulp fonts` - Grabs all the fonts and outputs them in a flattened directory
// structure. See: https://github.com/armed/gulp-flatten
// structure. See: https://github.com/armed/gulp-flatten
gulp.task('fonts', function() {
gulp.task('fonts', function() {
return gulp.src(globs.fonts)
return gulp.src(globs.fonts)
.pipe(flatten())
.pipe(flatten())
.pipe(gulp.dest(path.dist + 'fonts'))
.pipe(gulp.dest(path.dist + 'fonts'))
.pipe(browserSync.stream());
.pipe(browserSync.stream());
});
});
// ### Images
// ### Images
// `gulp images` - Run lossless compression on all the images.
// `gulp images` - Run lossless compression on all the images.
gulp.task('images', function() {
gulp.task('images', function() {
return gulp.src(globs.images)
return gulp.src(globs.images)
.pipe(imagemin({
.pipe(imagemin({
progressive: true,
progressive: true,
interlaced: true,
interlaced: true,
svgoPlugins: [{removeUnknownsAndDefaults: false}, {cleanupIDs: false}]
svgoPlugins: [{removeUnknownsAndDefaults: false}, {cleanupIDs: false}]
}))
}))
.pipe(gulp.dest(path.dist + 'images'))
.pipe(gulp.dest(path.dist + 'images'))
.pipe(browserSync.stream());
.pipe(browserSync.stream());
});
});
// ### JSHint
// ### JSHint
// `gulp jshint` - Lints configuration JSON and project JS.
// `gulp jshint` - Lints configuration JSON and project JS.
gulp.task('jshint', function() {
gulp.task('jshint', function() {
return gulp.src([
return gulp.src([
'bower.json', 'gulpfile.js'
'bower.json', 'gulpfile.js'
].concat(project.js))
].concat(project.js))
.pipe(jshint())
.pipe(jshint())
.pipe(jshint.reporter('jshint-stylish'))
.pipe(jshint.reporter('jshint-stylish'))
.pipe(gulpif(enabled.failJSHint, jshint.reporter('fail')));
.pipe(gulpif(enabled.failJSHint, jshint.reporter('fail')));
});
});
// ### Clean
// ### Clean
// `gulp clean` - Deletes the build folder entirely.
// `gulp clean` - Deletes the build folder entirely.
gulp.task('clean', require('del').bind(null, [path.dist]));
gulp.task('clean', require('del').bind(null, [path.dist]));
// ### Watch
// ### Watch
// `gulp watch` - Use BrowserSync to proxy your dev server and synchronize code
// `gulp watch` - Use BrowserSync to proxy your dev server and synchronize code
// changes across devices. Specify the hostname of your dev server at
// changes across devices. Specify the hostname of your dev server at
// `manifest.config.devUrl`. When a modification is made to an asset, run the
// `manifest.config.devUrl`. When a modification is made to an asset, run the
// build step for that asset and inject the changes into the page.
// build step for that asset and inject the changes into the page.
// See: http://www.browsersync.io
// See: http://www.browsersync.io
gulp.task('watch', function() {
gulp.task('watch', function() {
browserSync.init({
browserSync.init({
files: ['{lib,templates}/**/*.php', '*.php'],
files: ['{lib,templates}/**/*.php', '*.php'],
proxy: config.devUrl,
proxy: config.devUrl,
snippetOptions: {
snippetOptions: {
whitelist: ['/wp-admin/admin-ajax.php'],
whitelist: ['/wp-admin/admin-ajax.php'],
blacklist: ['/wp-admin/**']
blacklist: ['/wp-admin/**']
}
}
});
});
gulp.watch([path.source + 'styles/**/*'], ['styles']);
gulp.watch([path.source + 'styles/**/*'], ['styles']);
gulp.watch([path.source + 'scripts/**/*'], ['jshint', 'scripts']);
gulp.watch([path.source + 'scripts/**/*'], ['jshint', 'scripts']);
gulp.watch([path.source + 'fonts/**/*'], ['fonts']);
gulp.watch([path.source + 'fonts/**/*'], ['fonts']);
gulp.watch([path.source + 'images/**/*'], ['images']);
gulp.watch([path.source + 'images/**/*'], ['images']);
gulp.watch(['bower.json', 'assets/manifest.json'], ['build']);
gulp.watch(['bower.json', 'assets/manifest.json'], ['build']);
});
});
// ### Build
// ### Build
// `gulp build` - Run all the build tasks but don't clean up beforehand.
// `gulp build` - Run all the build tasks but don't clean up beforehand.
// Generally you should be running `gulp` instead of `gulp build`.
// Generally you should be running `gulp` instead of `gulp build`.
gulp.task('build', function(callback) {
gulp.task('build', function(callback) {
runSequence('styles',
runSequence('styles',
'scripts',
'scripts',
['fonts', 'images'],
['fonts', 'images'],
callback);
callback);
});
});
// ### Wiredep
// ### Wiredep
// `gulp wiredep` - Automatically inject Less and Sass Bower dependencies. See
// `gulp wiredep` - Automatically inject Less and Sass Bower dependencies. See
// https://github.com/taptapship/wiredep
// https://github.com/taptapship/wiredep
gulp.task('wiredep', function() {
gulp.task('wiredep', function() {
var wiredep = require('wiredep').stream;
var wiredep = require('wiredep').stream;
return gulp.src(project.css)
return gulp.src(project.css)
.pipe(wiredep())
.pipe(wiredep())
.pipe(changed(path.source + 'styles', {
.pipe(changed(path.source + 'styles', {
hasChanged: changed.compareSha1Digest
hasChanged: changed.compareSha1Digest
}))
}))
.pipe(gulp.dest(path.source + 'styles'));
.pipe(gulp.dest(path.source + 'styles'));
});
});
// ### Gulp
// ### Gulp
// `gulp` - Run a complete build. To compile for production run `gulp --production`.
// `gulp` - Run a complete build. To compile for production run `gulp --production`.
gulp.task('default', ['clean'], function() {
gulp.task('default', ['clean'], function() {
gulp.start('build');
gulp.start('build');
});
});
複製
已複製
複製
已複製
已保存差異
原始文本
開啟檔案
// ## Globals var argv = require('minimist')(process.argv.slice(2)); var autoprefixer = require('gulp-autoprefixer'); var browserSync = require('browser-sync').create(); var changed = require('gulp-changed'); var concat = require('gulp-concat'); var flatten = require('gulp-flatten'); var gulp = require('gulp'); var gulpif = require('gulp-if'); var imagemin = require('gulp-imagemin'); var jshint = require('gulp-jshint'); var lazypipe = require('lazypipe'); var less = require('gulp-less'); var merge = require('merge-stream'); var minifyCss = require('gulp-minify-css'); var plumber = require('gulp-plumber'); var rev = require('gulp-rev'); var runSequence = require('run-sequence'); var sass = require('gulp-sass'); var sourcemaps = require('gulp-sourcemaps'); var uglify = require('gulp-uglify'); // See https://github.com/austinpray/asset-builder var manifest = require('asset-builder')('./assets/manifest.json'); // `path` - Paths to base asset directories. With trailing slashes. // - `path.source` - Path to the source files. Default: `assets/` // - `path.dist` - Path to the build directory. Default: `dist/` var path = manifest.paths; // `config` - Store arbitrary configuration values here. var config = manifest.config || {}; // `globs` - These ultimately end up in their respective `gulp.src`. // - `globs.js` - Array of asset-builder JS dependency objects. Example: // ``` // {type: 'js', name: 'main.js', globs: []} // ``` // - `globs.css` - Array of asset-builder CSS dependency objects. Example: // ``` // {type: 'css', name: 'main.css', globs: []} // ``` // - `globs.fonts` - Array of font path globs. // - `globs.images` - Array of image path globs. // - `globs.bower` - Array of all the main Bower files. var globs = manifest.globs; // `project` - paths to first-party assets. // - `project.js` - Array of first-party JS assets. // - `project.css` - Array of first-party CSS assets. var project = manifest.getProjectGlobs(); // CLI options var enabled = { // Enable static asset revisioning when `--production` rev: argv.production, // Disable source maps when `--production` maps: !argv.production, // Fail styles task on error when `--production` failStyleTask: argv.production, // Fail due to JSHint warnings only when `--production` failJSHint: argv.production, // Strip debug statments from javascript when `--production` stripJSDebug: argv.production }; // Path to the compiled assets manifest in the dist directory var revManifest = path.dist + 'assets.json'; // ## Reusable Pipelines // See https://github.com/OverZealous/lazypipe // ### CSS processing pipeline // Example // ``` // gulp.src(cssFiles) // .pipe(cssTasks('main.css') // .pipe(gulp.dest(path.dist + 'styles')) // ``` var cssTasks = function(filename) { return lazypipe() .pipe(function() { return gulpif(!enabled.failStyleTask, plumber()); }) .pipe(function() { return gulpif(enabled.maps, sourcemaps.init()); }) .pipe(function() { return gulpif('*.less', less()); }) .pipe(function() { return gulpif('*.scss', sass({ outputStyle: 'nested', // libsass doesn't support expanded yet precision: 10, includePaths: ['.'], errLogToConsole: !enabled.failStyleTask })); }) .pipe(concat, filename) .pipe(autoprefixer, { browsers: [ 'last 2 versions', 'ie 8', 'ie 9', 'android 2.3', 'android 4', 'opera 12' ] }) .pipe(minifyCss, { advanced: false, rebase: false }) .pipe(function() { return gulpif(enabled.rev, rev()); }) .pipe(function() { return gulpif(enabled.maps, sourcemaps.write('.', { sourceRoot: 'assets/styles/' })); })(); }; // ### JS processing pipeline // Example // ``` // gulp.src(jsFiles) // .pipe(jsTasks('main.js') // .pipe(gulp.dest(path.dist + 'scripts')) // ``` var jsTasks = function(filename) { return lazypipe() .pipe(function() { return gulpif(enabled.maps, sourcemaps.init()); }) .pipe(concat, filename) .pipe(uglify, { compress: { 'drop_debugger': enabled.stripJSDebug } }) .pipe(function() { return gulpif(enabled.rev, rev()); }) .pipe(function() { return gulpif(enabled.maps, sourcemaps.write('.', { sourceRoot: 'assets/scripts/' })); })(); }; // ### Write to rev manifest // If there are any revved files then write them to the rev manifest. // See https://github.com/sindresorhus/gulp-rev var writeToManifest = function(directory) { return lazypipe() .pipe(gulp.dest, path.dist + directory) .pipe(browserSync.stream, {match: '**/*.{js,css}'}) .pipe(rev.manifest, revManifest, { base: path.dist, merge: true }) .pipe(gulp.dest, path.dist)(); }; // ## Gulp tasks // Run `gulp -T` for a task summary // ### Styles // `gulp styles` - Compiles, combines, and optimizes Bower CSS and project CSS. // By default this task will only log a warning if a precompiler error is // raised. If the `--production` flag is set: this task will fail outright. gulp.task('styles', ['wiredep'], function() { var merged = merge(); manifest.forEachDependency('css', function(dep) { var cssTasksInstance = cssTasks(dep.name); if (!enabled.failStyleTask) { cssTasksInstance.on('error', function(err) { console.error(err.message); this.emit('end'); }); } merged.add(gulp.src(dep.globs, {base: 'styles'}) .pipe(cssTasksInstance)); }); return merged .pipe(writeToManifest('styles')); }); // ### Scripts // `gulp scripts` - Runs JSHint then compiles, combines, and optimizes Bower JS // and project JS. gulp.task('scripts', ['jshint'], function() { var merged = merge(); manifest.forEachDependency('js', function(dep) { merged.add( gulp.src(dep.globs, {base: 'scripts'}) .pipe(jsTasks(dep.name)) ); }); return merged .pipe(writeToManifest('scripts')); }); // ### Fonts // `gulp fonts` - Grabs all the fonts and outputs them in a flattened directory // structure. See: https://github.com/armed/gulp-flatten gulp.task('fonts', function() { return gulp.src(globs.fonts) .pipe(flatten()) .pipe(gulp.dest(path.dist + 'fonts')) .pipe(browserSync.stream()); }); // ### Images // `gulp images` - Run lossless compression on all the images. gulp.task('images', function() { return gulp.src(globs.images) .pipe(imagemin({ progressive: true, interlaced: true, svgoPlugins: [{removeUnknownsAndDefaults: false}, {cleanupIDs: false}] })) .pipe(gulp.dest(path.dist + 'images')) .pipe(browserSync.stream()); }); // ### JSHint // `gulp jshint` - Lints configuration JSON and project JS. gulp.task('jshint', function() { return gulp.src([ 'bower.json', 'gulpfile.js' ].concat(project.js)) .pipe(jshint()) .pipe(jshint.reporter('jshint-stylish')) .pipe(gulpif(enabled.failJSHint, jshint.reporter('fail'))); }); // ### Clean // `gulp clean` - Deletes the build folder entirely. gulp.task('clean', require('del').bind(null, [path.dist])); // ### Watch // `gulp watch` - Use BrowserSync to proxy your dev server and synchronize code // changes across devices. Specify the hostname of your dev server at // `manifest.config.devUrl`. When a modification is made to an asset, run the // build step for that asset and inject the changes into the page. // See: http://www.browsersync.io gulp.task('watch', function() { browserSync.init({ files: ['{lib,templates}/**/*.php', '*.php'], proxy: config.devUrl, snippetOptions: { whitelist: ['/wp-admin/admin-ajax.php'], blacklist: ['/wp-admin/**'] } }); gulp.watch([path.source + 'styles/**/*'], ['styles']); gulp.watch([path.source + 'scripts/**/*'], ['jshint', 'scripts']); gulp.watch([path.source + 'fonts/**/*'], ['fonts']); gulp.watch([path.source + 'images/**/*'], ['images']); gulp.watch(['bower.json', 'assets/manifest.json'], ['build']); }); // ### Build // `gulp build` - Run all the build tasks but don't clean up beforehand. // Generally you should be running `gulp` instead of `gulp build`. gulp.task('build', function(callback) { runSequence('styles', 'scripts', ['fonts', 'images'], callback); }); // ### Wiredep // `gulp wiredep` - Automatically inject Less and Sass Bower dependencies. See // https://github.com/taptapship/wiredep gulp.task('wiredep', function() { var wiredep = require('wiredep').stream; return gulp.src(project.css) .pipe(wiredep()) .pipe(changed(path.source + 'styles', { hasChanged: changed.compareSha1Digest })) .pipe(gulp.dest(path.source + 'styles')); }); // ### Gulp // `gulp` - Run a complete build. To compile for production run `gulp --production`. gulp.task('default', ['clean'], function() { gulp.start('build'); });
更改後文本
開啟檔案
// ## Globals var argv = require('minimist')(process.argv.slice(2)); var autoprefixer = require('gulp-autoprefixer'); var browserSync = require('browser-sync').create(); var changed = require('gulp-changed'); var concat = require('gulp-concat'); var flatten = require('gulp-flatten'); var gulp = require('gulp'); var gulpif = require('gulp-if'); var imagemin = require('gulp-imagemin'); var jshint = require('gulp-jshint'); var lazypipe = require('lazypipe'); var less = require('gulp-less'); var merge = require('merge-stream'); var minifyCss = require('gulp-minify-css'); var plumber = require('gulp-plumber'); var rev = require('gulp-rev'); var runSequence = require('run-sequence'); var sass = require('gulp-sass'); var sourcemaps = require('gulp-sourcemaps'); var uglify = require('gulp-uglify'); var uncss = require('gulp-uncss'); var exec = require('gulp-exec'); // See https://github.com/austinpray/asset-builder var manifest = require('asset-builder')('./assets/manifest.json'); // `path` - Paths to base asset directories. With trailing slashes. // - `path.source` - Path to the source files. Default: `assets/` // - `path.dist` - Path to the build directory. Default: `dist/` var path = manifest.paths; // `config` - Store arbitrary configuration values here. var config = manifest.config || {}; // `globs` - These ultimately end up in their respective `gulp.src`. // - `globs.js` - Array of asset-builder JS dependency objects. Example: // ``` // {type: 'js', name: 'main.js', globs: []} // ``` // - `globs.css` - Array of asset-builder CSS dependency objects. Example: // ``` // {type: 'css', name: 'main.css', globs: []} // ``` // - `globs.fonts` - Array of font path globs. // - `globs.images` - Array of image path globs. // - `globs.bower` - Array of all the main Bower files. var globs = manifest.globs; // `project` - paths to first-party assets. // - `project.js` - Array of first-party JS assets. // - `project.css` - Array of first-party CSS assets. var project = manifest.getProjectGlobs(); // CLI options var enabled = { // Enable static asset revisioning when `--production` rev: argv.production, // Disable source maps when `--production` maps: !argv.production, // Fail styles task on error when `--production` failStyleTask: argv.production, // Fail due to JSHint warnings only when `--production` failJSHint: argv.production, // Strip debug statments from javascript when `--production` stripJSDebug: argv.production, // UnCSS when `--production` unCss: argv.production }; // Path to the compiled assets manifest in the dist directory var revManifest = path.dist + 'assets.json'; // ## Reusable Pipelines // See https://github.com/OverZealous/lazypipe // ### CSS processing pipeline // Example // ``` // gulp.src(cssFiles) // .pipe(cssTasks('main.css') // .pipe(gulp.dest(path.dist + 'styles')) // ``` var cssTasks = function(filename) { return lazypipe() .pipe(exec, 'curl --silent --output sitemap.json '+manifest.config.devUrl+'?show_sitemap') .pipe(function() { return gulpif(!enabled.failStyleTask, plumber()); }) .pipe(function() { return gulpif(enabled.maps, sourcemaps.init()); }) .pipe(function() { return gulpif('*.less', less()); }) .pipe(function() { return gulpif('*.scss', sass({ outputStyle: 'nested', // libsass doesn't support expanded yet precision: 10, includePaths: ['.'], errLogToConsole: !enabled.failStyleTask })); }) .pipe(concat, filename) .pipe(function() { return gulpif(enabled.unCss, uncss({ html: require('./sitemap.json') })); }) .pipe(autoprefixer, { browsers: [ 'last 2 versions', 'ie 8', 'ie 9', 'android 2.3', 'android 4', 'opera 12' ] }) .pipe(minifyCss, { advanced: false, rebase: false }) .pipe(function() { return gulpif(enabled.rev, rev()); }) .pipe(function() { return gulpif(enabled.maps, sourcemaps.write('.', { sourceRoot: 'assets/styles/' })); })(); }; // ### JS processing pipeline // Example // ``` // gulp.src(jsFiles) // .pipe(jsTasks('main.js') // .pipe(gulp.dest(path.dist + 'scripts')) // ``` var jsTasks = function(filename) { return lazypipe() .pipe(function() { return gulpif(enabled.maps, sourcemaps.init()); }) .pipe(concat, filename) .pipe(uglify, { compress: { 'drop_debugger': enabled.stripJSDebug } }) .pipe(function() { return gulpif(enabled.rev, rev()); }) .pipe(function() { return gulpif(enabled.maps, sourcemaps.write('.', { sourceRoot: 'assets/scripts/' })); })(); }; // ### Write to rev manifest // If there are any revved files then write them to the rev manifest. // See https://github.com/sindresorhus/gulp-rev var writeToManifest = function(directory) { return lazypipe() .pipe(gulp.dest, path.dist + directory) .pipe(browserSync.stream, {match: '**/*.{js,css}'}) .pipe(rev.manifest, revManifest, { base: path.dist, merge: true }) .pipe(gulp.dest, path.dist)(); }; // ## Gulp tasks // Run `gulp -T` for a task summary // ### Styles // `gulp styles` - Compiles, combines, and optimizes Bower CSS and project CSS. // By default this task will only log a warning if a precompiler error is // raised. If the `--production` flag is set: this task will fail outright. gulp.task('styles', ['wiredep'], function() { var merged = merge(); manifest.forEachDependency('css', function(dep) { var cssTasksInstance = cssTasks(dep.name); if (!enabled.failStyleTask) { cssTasksInstance.on('error', function(err) { console.error(err.message); this.emit('end'); }); } merged.add(gulp.src(dep.globs, {base: 'styles'}) .pipe(cssTasksInstance)); }); return merged .pipe(writeToManifest('styles')); }); // ### Scripts // `gulp scripts` - Runs JSHint then compiles, combines, and optimizes Bower JS // and project JS. gulp.task('scripts', ['jshint'], function() { var merged = merge(); manifest.forEachDependency('js', function(dep) { merged.add( gulp.src(dep.globs, {base: 'scripts'}) .pipe(jsTasks(dep.name)) ); }); return merged .pipe(writeToManifest('scripts')); }); // ### Fonts // `gulp fonts` - Grabs all the fonts and outputs them in a flattened directory // structure. See: https://github.com/armed/gulp-flatten gulp.task('fonts', function() { return gulp.src(globs.fonts) .pipe(flatten()) .pipe(gulp.dest(path.dist + 'fonts')) .pipe(browserSync.stream()); }); // ### Images // `gulp images` - Run lossless compression on all the images. gulp.task('images', function() { return gulp.src(globs.images) .pipe(imagemin({ progressive: true, interlaced: true, svgoPlugins: [{removeUnknownsAndDefaults: false}, {cleanupIDs: false}] })) .pipe(gulp.dest(path.dist + 'images')) .pipe(browserSync.stream()); }); // ### JSHint // `gulp jshint` - Lints configuration JSON and project JS. gulp.task('jshint', function() { return gulp.src([ 'bower.json', 'gulpfile.js' ].concat(project.js)) .pipe(jshint()) .pipe(jshint.reporter('jshint-stylish')) .pipe(gulpif(enabled.failJSHint, jshint.reporter('fail'))); }); // ### Clean // `gulp clean` - Deletes the build folder entirely. gulp.task('clean', require('del').bind(null, [path.dist])); // ### Watch // `gulp watch` - Use BrowserSync to proxy your dev server and synchronize code // changes across devices. Specify the hostname of your dev server at // `manifest.config.devUrl`. When a modification is made to an asset, run the // build step for that asset and inject the changes into the page. // See: http://www.browsersync.io gulp.task('watch', function() { browserSync.init({ files: ['{lib,templates}/**/*.php', '*.php'], proxy: config.devUrl, snippetOptions: { whitelist: ['/wp-admin/admin-ajax.php'], blacklist: ['/wp-admin/**'] } }); gulp.watch([path.source + 'styles/**/*'], ['styles']); gulp.watch([path.source + 'scripts/**/*'], ['jshint', 'scripts']); gulp.watch([path.source + 'fonts/**/*'], ['fonts']); gulp.watch([path.source + 'images/**/*'], ['images']); gulp.watch(['bower.json', 'assets/manifest.json'], ['build']); }); // ### Build // `gulp build` - Run all the build tasks but don't clean up beforehand. // Generally you should be running `gulp` instead of `gulp build`. gulp.task('build', function(callback) { runSequence('styles', 'scripts', ['fonts', 'images'], callback); }); // ### Wiredep // `gulp wiredep` - Automatically inject Less and Sass Bower dependencies. See // https://github.com/taptapship/wiredep gulp.task('wiredep', function() { var wiredep = require('wiredep').stream; return gulp.src(project.css) .pipe(wiredep()) .pipe(changed(path.source + 'styles', { hasChanged: changed.compareSha1Digest })) .pipe(gulp.dest(path.source + 'styles')); }); // ### Gulp // `gulp` - Run a complete build. To compile for production run `gulp --production`. gulp.task('default', ['clean'], function() { gulp.start('build'); });
尋找差異