如何使用 gulp-load-plugins 和 Browser-Sync?
How to use gulp-load-plugins with Browser-Sync?
在我的 Gulp 用法中,将任务拆分到单独的文件中开始变得有意义了。
为此,我希望使用 gulp-load-plugins
,但尽管我的任务运行了,但 Browser-Sync 似乎没有触发/执行任何操作。
这是我的精简设置。不确定我哪里出错了!
gulpfile.js
var gulp = require('gulp'),
plugins = require('gulp-load-plugins')();
function getTask(task) {
return require('./gulp/tasks/' + task)(gulp, plugins);
}
gulp.task('browser-sync', getTask('browser-sync'));
gulp.task('bs-reload', getTask('bs-reload'));
gulp.task('scripts', getTask('scripts'));
gulp.task('default', ['browser-sync'], function(){
gulp.watch('src/js/**/*.js', ['scripts']);
});
scripts.js(Gulp 任务)
var browserSync = require('browser-sync').create();
module.exports = function(gulp, plugins) {
return function() {
return gulp.src([
'src/js/plugins/**',
'src/js/app.js',
'!src/js/{libraries,libraries/**}'
])
.pipe(plugins.plumber({
errorHandler: function(error) {
console.log(error.message);
this.emit('end');
}}))
.pipe(plugins.concat('app.js'))
.pipe(gulp.dest('dist/js/'))
.pipe(plugins.rename({
suffix: '.min'
}))
.pipe(plugins.uglify({
preserveComments: 'none'
//preserveComments: 'some'
}))
.pipe(gulp.dest('dist/js/')) // Seems okay up until here...
.pipe(browserSync.reload({ // ...but this never seems to fire!
stream: true
}));
};
};
您会注意到我在 scripts.js
文件中需要浏览器同步,但这是因为 plugins.Browser-Sync 不起作用。我在某处读到这是因为 Browser-Sync 实际上不是 Gulp 插件。
因此,虽然我没有收到任何错误并且 Browser-Sync 似乎启动了...从那时起,我的脚本任务可以运行,但它不会触发 BrowserSync 部分。
非常感谢任何帮助!
PS,如果有帮助,这是我的 package.json
文件(请注意,上面我向您展示了我的 gulpfile.js
).
package.json
{
"name": "MichaelPumo",
"version": "1.0.0",
"description": "A frontend Gulp project for WordPress by Michael Pumo.",
"main": "gulpfile.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "MichaelPumo",
"license": "MIT",
"devDependencies": {
"browser-sync": "2.6.5",
"gulp-postcss": "~6.0.0",
"autoprefixer-core": "~5.2.1",
"gulp-sourcemaps": "~1.5.2",
"gulp-concat": "2.5.2",
"gulp-plumber": "1.0.0",
"gulp-rename": "1.2.2",
"gulp-sass": "2.0.4",
"gulp-uglify": "1.2.0",
"gulp": "~3.9.0",
"node-neat": "~1.7.2",
"gulp-svgmin": "~1.2.0",
"gulp-image-optimization": "~0.1.3",
"gulp-load-plugins": "~1.0.0"
}
}
对于任何想知道或对此一无所知的人,请注意默认情况下 gulp-load-plugins
仅适用于前缀为“gulp-
”的 NPM 包。
幸运的是,您可以更改此行为并将搜索作为选项传递,如下所示:
gulpfile.js
var gulp = require('gulp'),
plugins = require('gulp-load-plugins')({
pattern: '*'
});
在您的任务中,您现在可以将 Browser-Sync 引用为 plugins.browserSync
,如下所示:
浏览器-sync.js(Gulp任务)
'use strict';
module.exports = function(gulp, plugins) {
return function() {
plugins.browserSync.init({
port: 8080,
proxy: {
target: 'http://localhost:8888/my-website-path/'
}
});
};
};
希望这对其他人有帮助!
在我的 Gulp 用法中,将任务拆分到单独的文件中开始变得有意义了。
为此,我希望使用 gulp-load-plugins
,但尽管我的任务运行了,但 Browser-Sync 似乎没有触发/执行任何操作。
这是我的精简设置。不确定我哪里出错了!
gulpfile.js
var gulp = require('gulp'),
plugins = require('gulp-load-plugins')();
function getTask(task) {
return require('./gulp/tasks/' + task)(gulp, plugins);
}
gulp.task('browser-sync', getTask('browser-sync'));
gulp.task('bs-reload', getTask('bs-reload'));
gulp.task('scripts', getTask('scripts'));
gulp.task('default', ['browser-sync'], function(){
gulp.watch('src/js/**/*.js', ['scripts']);
});
scripts.js(Gulp 任务)
var browserSync = require('browser-sync').create();
module.exports = function(gulp, plugins) {
return function() {
return gulp.src([
'src/js/plugins/**',
'src/js/app.js',
'!src/js/{libraries,libraries/**}'
])
.pipe(plugins.plumber({
errorHandler: function(error) {
console.log(error.message);
this.emit('end');
}}))
.pipe(plugins.concat('app.js'))
.pipe(gulp.dest('dist/js/'))
.pipe(plugins.rename({
suffix: '.min'
}))
.pipe(plugins.uglify({
preserveComments: 'none'
//preserveComments: 'some'
}))
.pipe(gulp.dest('dist/js/')) // Seems okay up until here...
.pipe(browserSync.reload({ // ...but this never seems to fire!
stream: true
}));
};
};
您会注意到我在 scripts.js
文件中需要浏览器同步,但这是因为 plugins.Browser-Sync 不起作用。我在某处读到这是因为 Browser-Sync 实际上不是 Gulp 插件。
因此,虽然我没有收到任何错误并且 Browser-Sync 似乎启动了...从那时起,我的脚本任务可以运行,但它不会触发 BrowserSync 部分。
非常感谢任何帮助!
PS,如果有帮助,这是我的 package.json
文件(请注意,上面我向您展示了我的 gulpfile.js
).
package.json
{
"name": "MichaelPumo",
"version": "1.0.0",
"description": "A frontend Gulp project for WordPress by Michael Pumo.",
"main": "gulpfile.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "MichaelPumo",
"license": "MIT",
"devDependencies": {
"browser-sync": "2.6.5",
"gulp-postcss": "~6.0.0",
"autoprefixer-core": "~5.2.1",
"gulp-sourcemaps": "~1.5.2",
"gulp-concat": "2.5.2",
"gulp-plumber": "1.0.0",
"gulp-rename": "1.2.2",
"gulp-sass": "2.0.4",
"gulp-uglify": "1.2.0",
"gulp": "~3.9.0",
"node-neat": "~1.7.2",
"gulp-svgmin": "~1.2.0",
"gulp-image-optimization": "~0.1.3",
"gulp-load-plugins": "~1.0.0"
}
}
对于任何想知道或对此一无所知的人,请注意默认情况下 gulp-load-plugins
仅适用于前缀为“gulp-
”的 NPM 包。
幸运的是,您可以更改此行为并将搜索作为选项传递,如下所示:
gulpfile.js
var gulp = require('gulp'),
plugins = require('gulp-load-plugins')({
pattern: '*'
});
在您的任务中,您现在可以将 Browser-Sync 引用为 plugins.browserSync
,如下所示:
浏览器-sync.js(Gulp任务)
'use strict';
module.exports = function(gulp, plugins) {
return function() {
plugins.browserSync.init({
port: 8080,
proxy: {
target: 'http://localhost:8888/my-website-path/'
}
});
};
};
希望这对其他人有帮助!