Npm 吞咽v4监视任务

Npm 吞咽v4监视任务,npm,gulp,postcss,Npm,Gulp,Postcss,我刚升级到Gulp v4,想知道为什么我的gulpfile不再工作了。 我尝试了新文档的新代码,但没有按计划进行,因为我使用的是“纯”邮政编码。 所以我在谷歌上搜索我的问题,发现了这个问题: 然而,这也不是我问题的解决方案,尽管我收到了相同的错误消息error:watching src/styles/***。scss:watch task必须是一个函数 我目前拥有此代码 var gulp = require('gulp'); var sass = require('gulp-sass'); va


我刚升级到Gulp v4,想知道为什么我的gulpfile不再工作了。
我尝试了新文档的新代码,但没有按计划进行,因为我使用的是“纯”邮政编码。
所以我在谷歌上搜索我的问题,发现了这个问题:
然而,这也不是我问题的解决方案,尽管我收到了相同的错误消息
error:watching src/styles/***。scss:watch task必须是一个函数
我目前拥有此代码

var gulp = require('gulp');
var sass = require('gulp-sass');
var postcss = require('gulp-postcss');
var autoprefixer = require('autoprefixer');
var cssnano = require('cssnano');

gulp.task('default', function () {
    gulp.watch('src/styles/**/*.scss', ['styles']);
});

gulp.task('styles', function () {
    var processors = [
        autoprefixer({
            browsers: ['last 3 versions', 'ie > 9']
        }),
        cssnano()
    ];
    gulp.src('src/styles/main.scss')
        .pipe(sass().on('error', sass.logError))
        .pipe(postcss(processors))
        .pipe(gulp.dest('dist/files/styles/'));
});
当我改变时
gulp.watch('src/styles/***.scss',['styles'])

gulp.watch('src/styles/***.scss',gulp.series('styles')
它只给我一个
启动“默认”…
和更改文件后
启动“样式”…

大口喝了3.9,真是太棒了

Starting 'default'...
Finished 'default' after 174 ms
在更改文件之后

Starting 'styles'...
Finished 'styles' after 561 μs
我现在尝试了很多不同的方法,但我就是不能像以前那样让它工作。我真的在考虑像酷酷的孩子们一样切换到网页包。但是大口大口喝总是很好。


有人能给我解释一下我做错了什么吗?

在阅读了文档之后,更重要的是,理解了它,我自己就能够弄明白了

const autoprefixer=require('autoprefixer');
const-babel=require('gulp-babel');
const cssdclarationsorter=require('css-declaration-sorter');
const cssnano=require('cssnano');
const gulp=需要(“gulp”);
const postsss=需要('gulp-postsss');
const rename=require('gulp-rename');
const-sass=require('gulp-sass');
const-uglify=require('gulp-uglify');
常量路径={
“风格”:{
“base”:“src/styles/”,
“src”:“src/styles/main.scss”,
“dest”:“dist/styles/”,
“监视”:“src/styles/***.scss”,
},
“脚本”:{
“base”:“src/scripts/”,
“src”:“src/scripts/***.js”,
“dest”:“dist/scripts/”,
“watch”:“src/scripts/***.js”,
},
};
常量样式=函数(){
常量插件=[
autoprefixer(),
CSSDclarationSorter(),
cssnano(),
];
回灌(
paths.styles.src,
{
“base”:path.styles.base,
}
).
管道(sass()。打开(
“错误”,
逻辑错误
)).
管道(POSTSS(插件))。
管道(重命名)({
“basename”:“样式”,
“后缀”:“.min”,
})).
管道(大口目的地(路径、样式目的地));
};
常量脚本=函数(){
回灌(
path.scripts.src,
{
“base”:path.scripts.base,
}
).
管道(巴别塔()。
管道(丑()。
管道(重命名)({
“后缀”:“.min”,
})).
管道(gulp.dest(path.scripts.dest));
};
const watch=函数(){
大口喝手表(
paths.scripts.watch,
剧本
);
大口喝手表(
路径。样式。手表,
风格
);
};
const build=gulp.parallel(
风格,
剧本,
大口系列(手表)
);
exports.default=build;
模块的和

import autoprefixer from 'autoprefixer';
import babel from 'gulp-babel';
import cssdeclarationsorter from 'css-declaration-sorter';
import cssnano from 'cssnano';
import gulp from 'gulp';
import postcss from 'gulp-postcss';
import rename from 'gulp-rename';
import sass from 'gulp-sass';
import uglify from 'gulp-uglify';

const paths = {
    'styles': {
        'base': 'src/styles/',
        'src': 'src/styles/main.scss',
        'dest': 'dist/styles/',
        'watch': 'src/styles/**/*.scss',
    },
    'scripts': {
        'base': 'src/scripts/',
        'src': 'src/scripts/**/*.js',
        'dest': 'dist/scripts/',
        'watch': 'src/scripts/**/*.js',
    },
};

export const styles = function () {
    const plugins = [
        autoprefixer(),
        cssdeclarationsorter(),
        cssnano(),
    ];

    return gulp.src(
        paths.styles.src,
        {
            'base': paths.styles.base,
        }
    ).
        pipe(sass().on(
            'error',
            sass.logError
        )).
        pipe(postcss(plugins)).
        pipe(rename({
            'basename': 'styles',
            'suffix': '.min',
        })).
        pipe(gulp.dest(paths.styles.dest));
};

export const scripts = function () {
    return gulp.src(
        paths.scripts.src,
        {
            'base': paths.scripts.base,
        }
    ).
        pipe(babel()).
        pipe(uglify()).
        pipe(rename({
            'suffix': '.min',
        })).
        pipe(gulp.dest(paths.scripts.dest));
};

export const watch = function () {
    gulp.watch(
        paths.scripts.watch,
        scripts
    );
    gulp.watch(
        paths.styles.watch,
        styles
    );
};

const build = gulp.parallel(
    styles,
    scripts,
    gulp.series(watch)
);

export default build;

我自己也在努力解决这个问题

我头痛了好几个小时才发现v4.0基本上改变了一切

我已经像这样运行了我的代码,它工作得非常完美

//Do everything once!
  gulp.task('default', function(){
    gulp.watch('src/styles/*.css', gulp.series('css')),
    gulp.watch('src/html/*.html', gulp.series('copyHTML')),
    gulp.watch('src/js/*.js', gulp.series('scripts')),
    gulp.watch('src/images/*', gulp.series('imageMIN'));
  return
});
可以通过事件来使用

function watch() {
    const watcher = gulp.watch('src/styles/**/*.scss');
    watcher.on('change', function(path, stats) {
        styles(); //styles task
    });
}

exports.default = gulp.series(watch);

为了防止其他人(像我一样)偶然发现这一点,试图解决升级后Gulp无法工作的问题,我发现对我来说真正重要的只有两件事(在尝试了数百次之后)——

  • 路径分隔符的“\\”在Windows上不再有效。“/”是唯一的出路。这是我最长的痛点。无论如何,这样做可能更好,因为这样做可以跨平台——但当时我是在一个只使用Windows的项目上
  • 如果您正在调用tasks系列或返回承诺,请确保发出回调。这对我来说并不明显,确切地说是什么时候需要这样做的,而忽略这一点给我带来了巨大的痛苦。是这样的:
  • 我在上面的例子中特别使用了旧样式,以证明它实际上与您如何操作无关。Gulp非常宽容,但对于回调和路径,它是一个固执的人。我认为路径实际上与chokidar或gulp正在使用的某个子模块有关

    希望这能帮一些人省去一些痛苦。

    对于我的ionic v1项目(我知道,它现在已经过时了),我不得不将gulp文件更改为下面,以与v4更改保持同步。请注意,您要观看的每项任务都必须预定义(如果您使用ES6,请特别注意吊装):


    然后,您只需在CLI中运行
    gulp
    (这会导致它运行
    gulp default
    ,然后运行
    gulp watch
    ,它会监视给定目录中任何scss文件中的任何更改,并针对每次更改运行
    sass
    任务)

    您确定这是有效的gulp v4语法吗?您没有使用内置的
    exports
    变量来声明和公开任务。关键是
    gulp.series
    part。
    gulp.task('js', (done) => {
        gulp.src(src)
            .pipe(task())
            .pipe(task(etc))
            //etc
            .pipe(gulp.dest(dst));
        done();
    });
    
    
    var gulp = require('gulp');
    var sass = require('gulp-sass');
    var cleanCss = require('gulp-clean-css');
    var rename = require('gulp-rename');
    
    var paths = {
      sass: ['./scss/**/*.scss']
    };
    
    gulp.task('sass', function(done) {
      gulp.src('./scss/*.scss')
        .pipe(sass())
        .on('error', sass.logError)
        .pipe(gulp.dest('./www/css/'))
        .pipe(cleanCss({
          keepSpecialComments: 0
        }))
        .pipe(rename({extname: '.min.css'}))
        .pipe(gulp.dest('./www/css/'))
        .on('end', done);
    });
    
    gulp.task('watch', function () {
      gulp.watch(paths.sass, gulp.series('sass'));
    });
    
    gulp.task('default', gulp.series('watch'));