Jedes Mal, wenn ich etwas schlucke, erhalte ich einen Bestätigungsfehler. - Die Aufgabenfunktion muss angegeben werden

94

Ich versuche, den folgenden Befehl auszuführen, aber leider sind Fehler aufgetreten.

$ gulp build

In meinem Terminal und ich bekomme diesen Assertionsfehler. Ich habe Node und NPM deinstalliert und mit Brew erneut installiert. Wie deinstalliere ich Node.js vollständig und installiere es von Anfang an (Mac OS X) mit diesen Schritten neu. Meine Knotenversion ist v10.5.0 und die npm-Version ist 6.1.0.

Mein System ist MacOS High Sierra 10.13.2

assert.js:269
    throw err;
    ^

AssertionError [ERR_ASSERTION]: Task function must be specified
    at Gulp.set [as _setTask] (bulkit/startup-kit/node_modules/undertaker/lib/set-task.js:10:3)
    at Gulp.task (startup-kit/node_modules/undertaker/lib/task.js:13:8)
    at Object.<anonymous> 
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)
    at Module.require (internal/modules/cjs/loader.js:650:17)
    at require (internal/modules/cjs/helpers.js:20:18)

package.json

{
    "name": "bulkit-startup",
    "version": "0.0.1",
    "description": "Bulkit Startup Kit",
    "main": "Gruntfile.js",
    "devDependencies": {
        "autoprefixer": "^6.3.6",
        "browser-sync": "^2.24.5",
        "gulp": "^4.0.0",
        "gulp-clean": "^0.3.2",
        "gulp-concat": "^2.6.0",
        "gulp-postcss": "^6.1.0",
        "gulp-sass": "^2.2.0",
        "gulp-sourcemaps": "^1.6.0",
        "jquery": "^3.3.1",
        "mq4-hover-shim": "^0.3.0",
        "panini": "^1.3.0",
        "rimraf": "^2.5.2"
    },
    "engines": {
        "node": ">=0.10.1"
    },
    "scripts": {
        "start": "gulp",
        "build": "gulp build"
    },
    "repository": {
        "type": "git",
        "url": "https://github.com/cssninjaStudio/bulkit.git"
    },
    "bugs": {
        "url": "https://github.com/cssninjaStudio/bulkit/issues",
        "email": "[email protected]"
    },
    "author": "Css Ninja <[email protected]> (https://cssninja.io/themes/bulkit)",
    "license": "Commercial",
    "private": true,
    "dependencies": {
        "bulma": "^0.7.0",
        "del": "^3.0.0",
        "jquery-waypoints": "^2.0.5",
        "jquery.counterup": "^2.1.0",
        "scrollreveal": "^3.4.0",
        "slick-carousel": "^1.8.1",
        "wallop": "^2.4.1"
    }
}

gulpfile.js

var gulp = require('gulp');
var clean = require('gulp-clean');
var sass = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');
var postcss = require('gulp-postcss');
var autoprefixer = require('autoprefixer');
var mq4HoverShim = require('mq4-hover-shim');
var rimraf = require('rimraf').sync;
var browser = require('browser-sync');
var panini = require('panini');
var concat = require('gulp-concat');
var port = process.env.SERVER_PORT || 8080;
var nodepath =  'node_modules/';
var assetspath =  'assets/';

// Starts a BrowerSync instance
gulp.task('server', ['build'], function(){
    browser.init({server: './_site', port: port});
});

// Watch files for changes
gulp.task('watch', function() {
    gulp.watch('scss/**/*', ['compile-scss', browser.reload]);
    gulp.watch('sass/**/*', ['compile-sass', browser.reload]);
    gulp.watch('js/**/*', ['copy-js', browser.reload]);
    gulp.watch('images/**/*', ['copy-images', browser.reload]);
    gulp.watch('html/pages/**/*', ['compile-html']);
    gulp.watch(['html/{layouts,includes,helpers,data}/**/*'], ['compile-html:reset','compile-html']);
    gulp.watch(['./src/{layouts,partials,helpers,data}/**/*'], [panini.refresh]);
});

// Erases the dist folder
gulp.task('reset', function() {
    rimraf('bulma/*');
    rimraf('scss/*');
    rimraf('assets/css/*');
    rimraf('assets/fonts/*');
    rimraf('images/*');
});

// Erases the dist folder
gulp.task('clean', function() {
    rimraf('_site');
});

// Copy Bulma filed into Bulma development folder
gulp.task('setupBulma', function() {
    //Get Bulma from node modules
    gulp.src([nodepath + 'bulma/*.sass']).pipe(gulp.dest('bulma/'));
    gulp.src([nodepath + 'bulma/**/*.sass']).pipe(gulp.dest('bulma/'));
});

// Copy static assets
gulp.task('copy', function() {
    //Copy other external font and data assets
    gulp.src(['assets/fonts/**/*']).pipe(gulp.dest('_site/assets/fonts/'));
    gulp.src([nodepath + 'slick-carousel/slick/fonts/**/*']).pipe(gulp.dest('_site/assets/css/fonts/'));
    gulp.src([nodepath + 'slick-carousel/slick/ajax-loader.gif']).pipe(gulp.dest('_site/assets/css/'));
});

//Theme Sass variables
var sassOptions = {
    errLogToConsole: true,
    outputStyle: 'compressed',
    includePaths: [nodepath + 'bulma/sass']
};

//Theme Scss variables
var scssOptions = {
    errLogToConsole: true,
    outputStyle: 'compressed',
    includePaths: ['./scss/partials']
};

// Compile Bulma Sass
gulp.task('compile-sass', function () {
    var processors = [
        mq4HoverShim.postprocessorFor({ hoverSelectorPrefix: '.is-true-hover ' }),
        autoprefixer({
            browsers: [
                "Chrome >= 45",
                "Firefox ESR",
                "Edge >= 12",
                "Explorer >= 10",
                "iOS >= 9",
                "Safari >= 9",
                "Android >= 4.4",
                "Opera >= 30"
            ]
        })//,
        //cssnano(),
    ];
    //Watch me get Sassy
    return gulp.src('./bulma/bulma.sass')
        .pipe(sourcemaps.init())
        .pipe(sass(sassOptions).on('error', sass.logError))
        .pipe(postcss(processors))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest('./_site/assets/css/'));
});

// Compile Theme Scss
gulp.task('compile-scss', function () {
    var processors = [
        mq4HoverShim.postprocessorFor({ hoverSelectorPrefix: '.is-true-hover ' }),
        autoprefixer({
            browsers: [
                "Chrome >= 45",
                "Firefox ESR",
                "Edge >= 12",
                "Explorer >= 10",
                "iOS >= 9",
                "Safari >= 9",
                "Android >= 4.4",
                "Opera >= 30"
            ]
        })//,
        //cssnano(),
    ];
    //Watch me get Sassy
    return gulp.src('./scss/core.scss')
        .pipe(sourcemaps.init())
        .pipe(sass(sassOptions).on('error', sass.logError))
        .pipe(postcss(processors))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest('./_site/assets/css/'));
});

// Compile Html
gulp.task('compile-html', function() {
    gulp.src('html/pages/**/*.html')
        .pipe(panini({
        root: 'html/pages/',
        layouts: 'html/layouts/',
        partials: 'html/includes/',
        helpers: 'html/helpers/',
        data: 'html/data/'
    }))
        .pipe(gulp.dest('_site'))
        .on('finish', browser.reload);
});

gulp.task('compile-html:reset', function(done) {
    panini.refresh();
    done();
});

// Compile css from node modules
gulp.task('compile-css', function() {
    return gulp.src([ 
        nodepath + 'slick-carousel/slick/slick.css',
        nodepath + 'slick-carousel/slick/slick-theme.css',
        nodepath + 'wallop/css/wallop.css',
        //Additional static css assets
        assetspath + 'css/icons.min.css',
    ])
        .pipe(concat('app.css'))
        .pipe(gulp.dest('./_site/assets/css/'));
});

// Compile js from node modules
gulp.task('compile-js', function() {
    return gulp.src([ 
        nodepath + 'jquery/dist/jquery.min.js', 
        nodepath + 'slick-carousel/slick/slick.min.js', 
        nodepath + 'scrollreveal/dist/scrollreveal.min.js',
        nodepath + 'waypoints/lib/jquery.waypoints.min.js',
        nodepath + 'waypoints/lib/shortcuts/sticky.min.js',
        nodepath + 'jquery.counterup/jquery.counterup.min.js',
        nodepath + 'wallop/js/Wallop.min.js',
        //Additional static js assets
        assetspath + 'js/ggpopover/ggpopover.min.js',
        assetspath + 'js/ggpopover/ggtooltip.js',
        assetspath + 'js/embed/embed.js',
        assetspath + 'js/gmap/gmap.min.js',
    ])
        .pipe(concat('app.js'))
        .pipe(gulp.dest('./_site/assets/js/'));
});

//Copy Theme js to production site
gulp.task('copy-js', function() {
    gulp.src('js/**/*.js')
        .pipe(gulp.dest('./_site/assets/js/'));
});

//Copy images to production site
gulp.task('copy-images', function() {
    gulp.src('images/**/*')
        .pipe(gulp.dest('./_site/assets/images/'));
});

gulp.task('init', ['setupBulma']);
gulp.task('build', ['clean','copy', 'compile-js', 'compile-css', 'copy-js', 'compile-sass', 'compile-scss', 'compile-html', 'copy-images']);
gulp.task('default', ['server', 'watch']);
Arthur Truong
quelle

Antworten:

153

Gulp 4.0 hat die Art und Weise geändert, wie Aufgaben definiert werden sollen, wenn die Aufgabe von einer anderen auszuführenden Aufgabe abhängt. Der Listenparameter ist veraltet.

Ein Beispiel aus Ihrer Datei gulpfile.js wäre:

// Starts a BrowerSync instance
gulp.task('server', ['build'], function(){
  browser.init({server: './_site', port: port});
});

Anstelle des Listenparameters haben sie gulp.series()und eingeführt gulp.parallel().

Diese Aufgabe sollte folgendermaßen geändert werden:

// Starts a BrowerSync instance
gulp.task('server', gulp.series('build', function(){
  browser.init({server: './_site', port: port});
}));

Ich bin kein Experte in diesem Bereich. Ein robusteres Beispiel finden Sie in der gulp-Dokumentation zum Ausführen von Aufgaben in Serie oder in den folgenden ausgezeichneten Blog-Posts von Jhey Thompkins und Stefan Baumgartner

https://codeburst.io/switching-to-gulp-4-0-271ae63530c0

https://fettblog.eu/gulp-4-parallel-and-series/

standevenjw
quelle
1
Dies ändert meinen Fehler von Task must be specifiedzu Task never defined.
2540625
43

Versuchen Sie, Ihre letzte Zeile von gulpfile.js zu ersetzen

gulp.task('default', ['server', 'watch']);

mit

gulp.task('default', gulp.series('server', 'watch'));
Arif I.
quelle
1
kurz und nützlich :)
ehsan
22

Senken Sie Ihre gulp-Version in der Datei package.json auf 3.9.1-

"gulp": "^3.9.1",
Samyak Jain
quelle
5
Tun Sie dies nicht, wenn Sie sich auf Node v10 befinden.
Bbsimonbb
1
@bbsimonbb Könnten Sie das bitte näher erläutern?
Henri
2
@Henri Version 4 hat die Ausführung von Aufgaben geändert. Damit sein aktueller Code funktioniert, muss er gulp 3.9.1 ausführen. Aber die bessere Antwort ist, seinen Code zu aktualisieren, um mit gulp 4+ kompatibel zu sein
user441058
14

Sie müssen Ihren Schluck nicht von Schluck 4 herabstufen . Verwenden Sie gulp.series (), um mehrere Aufgaben zu kombinieren. Installieren Sie gulp zunächst global mit

npm install --global gulp-cli

und installieren Sie dann lokal in Ihrem Arbeitsverzeichnis mit

npm install --save-dev gulp

Details finden Sie hier

Beispiel:

package.json

{
  "name": "gulp-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "browser-sync": "^2.26.3",
    "gulp": "^4.0.0",
    "gulp-sass": "^4.0.2"
  },
  "dependencies": {
    "bootstrap": "^4.3.1",
    "jquery": "^3.3.1",
    "popper.js": "^1.14.7"
  }
}

gulpfile.js

var gulp = require("gulp");
var sass = require('gulp-sass');
var browserSync = require('browser-sync').create();

// Specific Task
function js() {
    return gulp
    .src(['node_modules/bootstrap/dist/js/bootstrap.min.js', 'node_modules/jquery/dist/jquery.min.js', 'node_modules/popper.js/dist/umd/popper.min.js'])
    .pipe(gulp.dest('src/js'))
    .pipe(browserSync.stream());
}
gulp.task(js);

// Specific Task
function gulpSass() {
    return gulp
    .src(['src/scss/*.scss'])
    .pipe(sass())
    .pipe(gulp.dest('src/css'))
    .pipe(browserSync.stream());
}
gulp.task(gulpSass);

// Run multiple tasks
gulp.task('start', gulp.series(js, gulpSass));

Ausführen gulp start, um mehrere Aufgaben auszulösen und auszuführen gulp jsoder gulp gulpSassfür eine bestimmte Aufgabe.

Motahar Hossain
quelle
1
Das war nah genug. Musste die Gulp-Website überprüfen, um die Syntax richtig zu machen und Exporte hinzuzufügen.
Luke Puplett
10

https://fettblog.eu/gulp-4-parallel-and-series/

Weil gulp.task(name, deps, func)wurde durch ersetzt gulp.task(name, gulp.{series|parallel}(deps, func)).

Sie verwenden die neueste Version von gulp, aber älteren Code . Ändern Sie den Code oder führen Sie ein Downgrade durch.

Ashim Sth
quelle
6

Ich erhalte den gleichen Fehler bei der Verwendung von Gulp. Die Lösung besteht darin, sowohl für die lokale Version als auch für die CLI-Version auf Gulp Version 3.9.1 umzusteigen.

sudo npm install -g gulp@3.9.1

Führen Sie im Projektordner aus

npm install gulp@3.9.1
Jopie
quelle
3

Es ist nicht gut, die gulp & npm-Versionen ständig zu ändern, um die Fehler zu beheben. Ich habe letzte Tage nach der Neuinstallation meiner Arbeitsmaschine mehrere Ausnahmen erhalten. Und verschwendete Tonnen von Minuten, um diese wieder zu installieren und zu reparieren.

Also habe ich beschlossen, alle auf die neuesten Versionen zu aktualisieren:

npm -v : v12.13.0 
node -v : 6.13.0
gulp -v : CLI version: 2.2.0 Local version: 4.0.2

Dieser Fehler tritt aufgrund der Codierung in Ihrer Gulpfile auf, jedoch nicht aufgrund der Versionsinkongruenz. Also, hier müssen Sie 2 Dinge in der Gulpfile ändern, um sie an Gulp Version 4 auszurichten. Gulp 4 hat geändert, wie die Aufgabe initiiert wird, als Version 3.

  1. In Version 4 müssen Sie die Aufgabe als Funktion definieren, bevor Sie sie als Gulp-Aufgabe anhand ihres Zeichenfolgennamens aufrufen. In V3:

gulp.task ('serve', ['sass'], function () {..});

Aber in V4 sollte es so sein:

function serve() {
...
}
gulp.task('serve', gulp.series(sass));
  1. Wie @Arthur erwähnt hat, müssen Sie die Art der Übergabe von Argumenten an die Taskfunktion ändern. In V3 war es so:

gulp.task ('serve', ['sass'], function () {...});

Aber in V4 sollte es sein:

gulp.task('serve', gulp.series(sass));
Sadee
quelle
0

Das Problem ist, dass Sie gulp 4 verwenden und die Syntax in gulfile.js gulp 3 ist. Führen Sie also entweder ein Downgrade Ihres gulp auf 3.xx durch oder verwenden Sie gulp 4-Syntaxen.

Syntax Gulp 3:

gulp.task('default', ['sass'], function() {....} );

Syntax Gulp 4:

gulp.task('default', gulp.series(sass), function() {....} );

Weitere Informationen zu Schluck- und Schluckaufgaben finden Sie unter: https://medium.com/@sudoanushil/how-to-write-gulp-tasks-ce1b1b7a7e81

Anushil Kumar
quelle
-4

Schritte:

  1. "schlucken": "^ 3.9.1",
  2. npm installieren
  3. Schluckstile
Dann
quelle