javascript - 任务从未定义: browserSync.重新加载

标签 javascript node.js gulp

我从 Gulp 3.x.x 升级到 Gulp 4.0.2 并开始编辑我的 gulpfile 以使其兼容,但当我尝试运行 gulp 时,我遇到了这个错误:

AssertionError [ERR_ASSERTION]: Task never defined: browserSync.reload

这是我认为我的 gulpfile 的相关部分:

gulp.task('browserSync', function() {
  browserSync({
    server: {
      baseDir: 'app'
    },
      browser: 'Chrome'
  })
})

gulp.task('sass', function() {
  return gulp.src('app/styles/**/*.scss') // Gets all files ending with .scss in app/scss and children dirs
    .pipe(sass().on('error', sass.logError)) // Passes it through a gulp-sass, log errors to console
    .pipe(gulp.dest('app/styles')) // Outputs it in the css folder
    .pipe(browserSync.reload({ // Reloading with Browser Sync
      stream: true
    }));
})

// Watchers
gulp.task('watch', function() {
  gulp.watch('app/styles/**/*.scss', gulp.series('sass'));
  gulp.watch('app/*.html', gulp.series('browserSync.reload'));
  gulp.watch('app/js/**/*.js', gulp.series('browserSync.reload'));
})

我使用的是 Node 版本 11.15.0。后来的版本给我带来了问题。

最佳答案

您的直接错误是这两行的结果:

gulp.watch('app/*.html', gulp.series('browserSync.reload'));
gulp.watch('app/js/**/*.js', gulp.series('browserSync.reload'));

只需删除 browserSync.reload 调用周围的引号即可:

gulp.watch('app/*.html', gulp.series(browserSync.reload));
gulp.watch('app/js/**/*.js', gulp.series(browserSync.reload));

如果这些调用是对任务的调用,那么将它们放入引号中是正确的。但您的调用不是对任务的调用,而是对您的 const browserSync = require('browser-sync) 包的调用。

因此,使用相同的标识符 - browserSync 来表示您的包需要名称和任务名称会令人困惑,并且可能会导致错误,就像您所做的那样。

如下所示:

gulp.task('browserSync', function() {
  browserSync({
    server: {
      baseDir: 'app'
    },
      browser: 'Chrome'
  })
})

browserSync 的第一次使用是作为任务名称。第二个位于函数体中,是对包名称的引用。第二个最终是在您的 watch 任务中使用的,不会在那里被引用,因为它不是任务名称。因此,使用 browserSync 这两种方式肯定会令人困惑 - 只需为一个名称选择一个不同的名称,例如:

gulp.task('bSync', function() {
  browserSync.init({......

另请注意添加到上述代码中的 init。您将需要它。

关于javascript - 任务从未定义: browserSync.重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513528/

相关文章:

node.js - 编写一个 io.js 兼容的 npm 模块

gulp - 有没有办法在 VSCode 中刷新任务列表?

javascript - Webpack DllPlugin with gulp : Cannot find module '... vendor-manifest.json'

angularjs - 无法通过 npm 安装 gulp-jshint

javascript - 如何获取对象的方法?

javascript - ng-repeat 中的条件格式/样式

javascript - jQuery 无法点击菜单

php - 有没有办法在 php 中使用 Node js 库?

javascript - 在 NodeJS 中删除/重置/清除布隆过滤器

javascript - Angular : function triggers twice on ng-change while selecting any option from dropdown