javascript - Gulp 4 watch() 类型错误 : expected a string

标签 javascript gulp frontend gulp-watch gulp-4

我在启动 gulp 时遇到问题。我得到的信息来自 https://coder-coder.com/gulp-4-walk-through/https://www.youtube.com/watch?v=-lG0kDeuSJk .

我的 gulpfile.js

// Initialize modules
const { src, dest, watch, series, parallel } = require('gulp');
const autoprefixer = require('autoprefixer');
const cssnano = require('cssnano');
const concat = require('gulp-concat');
const postcss = require('gulp-postcss');
const replace = require('gulp-replace');
const sass = require('gulp-sass');
const sourcemaps = require('gulp-sourcemaps');
const terser = require('gulp-terser');

// File path variables
const files = {
  scssPath: './assets/styles/sass/**/*.scss',
  jsPath: './assets/js/**/*.js'
}

// Sass taks
function scssTask(){
 return src(files.scssPath)
   .pipe(sourcemaps.init())
   .pipe(sass())
   .pipe(postcss([ autoprefixer(), cssnano() ]))
   .pipe(sourcemaps.write('.'))
   .pipe(dest('dist'));
}

 // JS taks
 function jsTask(){
   return src(files.jsPath)
       .pipe(concat('main.js'))
       .pipe(terser())
       .pipe(dest('dist'));
 }

 // Cachebusting taks
 const cbString = new Date().getTime();
 function cacheBustTask(){
   return src(['index.html'])
       .pipe(replace(/cb=\d+/g, 'cb=' + cbString))
       .pipe(dest('.'));
 }     

 // Watch taks
 function watchTask(){
   watch([files.scssPath, files.jsFiles],
     series(
       parallel(scssTask, jsTask),
       cacheBustTask
     )
   );
 }
 // Default task
 exports.default = series(
   parallel(scssTask, jsTask),
   cacheBustTask,
   watchTask
 );

当我在文件夹中启动命令 gulp 时,我收到一条错误消息:

[09:53:25]“watchTask”在 1.81 毫秒后出错

[09:53:25] TypeError:需要一个字符串

at module.exports (D:\Web-Development\Startup\practise\sassStructure-Copy\node_modules\is-negated-glob\index.js:5:11)

at sortGlobs (D:\Web-Development\Startup\practise\sassStructure-Copy\node_modules\glob-watcher\index.js:66:18)

at Array.forEach (<anonymous>)

at watch (D:\Web-Development\Startup\practise\sassStructure-Copy\node_modules\glob-watcher\index.js:63:18)

at Gulp.watch (D:\Web-Development\Startup\practise\sassStructure-Copy\node_modules\gulp\index.js:48:10)

at watchTask (D:\Web-Development\Startup\practise\sassStructure-Copy\gulpfile.js:46:3)

at bound (domain.js:420:14)

at runBound (domain.js:433:12)

at asyncRunner (D:\Web-Development\Startup\practise\sassStructure-Copy\node_modules\async-done\index.js:55:18)

at processTicksAndRejections (internal/process/task_queues.js:75:11)

[09:53:25]“默认”在 721 毫秒后出错

我该如何解决这个问题?它需要字符串,我给它一个字符串喷射器,但它不起作用。 我已经放了

   function watchTask(){
      watch([files.scssPath, files.jsFiles],
        series(
          parallel(scssTask, jsTask),
          cacheBustTask
        )
      );
    }

然后我没有收到任何错误,watchTask 启动但没有文件更新,只是沉默哈哈

这是文件夹结构:[链接] https://i.ibb.co/LPYsxWG/brisi.png

有人可以解释一下为什么它不知道它是像每个人的项目中那样的字符串,而我必须使用 toString() 将其转换为字符串以及为什么监视函数 watchTask 无法识别任何更新? 提前致谢。

最佳答案

您似乎使用了错误的变量名称。应使用jsPath。无论哪种方式,请尝试使其更具可读性...例如您可以使用:

const watch = function() {
    gulp.watch("./assets/styles/sass/**/*.scss", {usePolling : true}, gulp.series(css));
    gulp.watch("./assets/js/**/*.js", {usePolling : true}, gulp.series(js));
};

如果您使用此代码,则 watch 无需在代码的第一行中要求 gulp。

最后将 block 制作成这样:

 // Default task
 exports.default = series(
   parallel(scssTask, jsTask),
   cacheBustTask,
   watch
 );

exports.watch = watch ;

关于javascript - Gulp 4 watch() 类型错误 : expected a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58899241/

相关文章:

javascript - 如何使用(键值)在 ng-options 中设置默认值

javascript - 如何在img标签的onerror属性上发送http请求?

javascript - 使用ajax向ruby Controller 发送数据

laravel - 文件 css/all.css 未在 Assets list 中定义

azure - 在azure devops管道中执行gulp脚本

javascript - 必须多次运行 gulp 才能获得样式更改

javascript - Javascript 中静态函数声明和普通函数声明的区别?

css - 订购在 Bootstrap 4 上不起作用

javascript - 通过 Ajax 加载的内容会破坏按钮

css - Sass 可以识别大小并应用条件吗?