【问题标题】:How to use gulp-load-plugins with Browser-Sync?如何将 gulp-load-plugins 与 Browser-Sync 一起使用?
【发布时间】:2016-01-28 01:54:19
【问题描述】:

在我使用 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 文件中需要 Browser-Sync,但这是因为执行 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"
  }
}

【问题讨论】:

    标签: npm gulp browser-sync gulp-load-plugins


    【解决方案1】:

    对于任何对此感到疑惑或不了解的人,请注意,默认情况下,gulp-load-plugins 仅适用于前缀为“gulp-”的 NPM 包。

    幸运的是,您可以更改此行为并将搜索作为选项传递,如下所示:

    gulpfile.js

    var gulp = require('gulp'),
        plugins = require('gulp-load-plugins')({
            pattern: '*'
        });
    

    在您的任务中,您现在可以将 Browser-Sync 引用为 plugins.browserSync,如下所示:

    browser-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 任务?另外,请注意您的插件可以这样设置var plugins = require('gulp-load-plugins')({ overridePattern: true, pattern: ['gulp-*', 'gulp.*', '@*/gulp{-,.}*', 'browser-*'] }); 这样您就不需要引入所有依赖项。
    • 您必须小心设置此模式,因为如果您在package.json 中同时声明了eslintgulp-eslint,插件将失败。
    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2018-04-20
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多