Mỗi khi tôi chạy bất cứ thứ gì, tôi đều gặp lỗi xác nhận. - Chức năng nhiệm vụ phải được chỉ định


102

Tôi đang cố gắng chạy lệnh bên dưới nhưng không may là tôi gặp lỗi.

$ gulp build

Trong thiết bị đầu cuối của tôi và tôi gặp lỗi xác nhận này. Tôi đã gỡ cài đặt nútNPM và cài đặt lại bằng cách sử dụng brew - Làm cách nào để gỡ cài đặt hoàn toàn Node.js và cài đặt lại từ đầu (Mac OS X) bằng các bước sau. Phiên bản nút của tôi là v10.5.0 và phiên bản npm là 6.1.0.

Hệ thống của tôi là 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": "support@cssninja.io"
    },
    "author": "Css Ninja <hello@cssninja.io> (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']);

Câu trả lời:


168

Gulp 4.0 đã thay đổi cách xác định các tác vụ nếu tác vụ phụ thuộc vào một tác vụ khác để thực thi. Tham số danh sách không được dùng nữa.

Ví dụ từ gulpfile.js của bạn sẽ là:

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

Thay vì tham số danh sách mà họ đã giới thiệu gulp.series()gulp.parallel().

Tác vụ này nên được thay đổi thành một cái gì đó như sau:

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

Tôi không phải là một chuyên gia trong việc này. Bạn có thể xem một ví dụ mạnh mẽ hơn trong tài liệu gulp để chạy các tác vụ theo chuỗi hoặc các bài đăng blog xuất sắc sau đây của Jhey Thompkins và Stefan Baumgartner

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

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


2
Điều này thay đổi lỗi của tôi từ Task must be specifiedthành Task never defined.
2540625

@ 2540625 Cuối cùng thì tôi hy vọng bạn đã sắp xếp xong vấn đề này nhưng tôi đã gặp phải vấn đề tương tự cho đến khi tôi chuyển định nghĩa của gulp.task bằng các lệnh gọi series () / song song () bên dưới nơi các tác vụ có tên ở đó được xác định. Có vẻ như đây là lỗi javascript cổ điển khi cố gắng sử dụng một hàm trước khi nó được xác định.
Jon

51

Hãy thử thay thế dòng cuối cùng của bạn bằng gulpfile.js

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

với

gulp.task('default', gulp.series('server', 'watch'));

1
ngắn và hữu ích :)
ehsan

22

Hạ phiên bản gulp của bạn trong tệp package.json xuống 3.9.1-

"gulp": "^3.9.1",

6
Đừng làm điều này nếu bạn đang sử dụng Node v10.
bbsimonbb

1
@bbsimonbb bạn có thể giải thích thêm về điều đó được không?
Henri

2
@Henri Phiên bản 4 đã thay đổi cách chạy các tác vụ, vì vậy để mã hiện tại của anh ấy hoạt động, anh ấy cần chạy gulp 3.9.1. Nhưng câu trả lời tốt hơn là để cập nhật mã của mình để phù hợp với ngụm 4+
user441058

14

Bạn không cần phải hạ cấp gulp của mình từ gulp 4 . Sử dụng gulp.series () để kết hợp nhiều tác vụ. Lúc đầu, hãy cài đặt gulp trên toàn cầu với

npm install --global gulp-cli

và sau đó cài đặt cục bộ trên thư mục làm việc của bạn với

npm install --save-dev gulp

xem chi tiết tại đây

Thí dụ:

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));

Chạy gulp startđể kích hoạt nhiều nhiệm vụ và chạy gulp jshoặc gulp gulpSasscho nhiệm vụ cụ thể.


1
Điều này đã đủ gần. Phải kiểm tra trang web Gulp để có đúng cú pháp và thêm xuất.
Luke Puplett


6

Tôi gặp lỗi tương tự khi sử dụng Gulp. Giải pháp là chuyển sang Gulp phiên bản 3.9.1, cho cả phiên bản cục bộ và phiên bản CLI.

sudo npm install -g gulp@3.9.1

Chạy trong thư mục của dự án

npm install gulp@3.9.1

3

Sẽ không tốt nếu bạn tiếp tục thay đổi phiên bản gulp & npm để sửa lỗi. Tôi đã nhận được một số ngoại lệ vào những ngày trước sau khi cài đặt lại máy làm việc của mình. Và lãng phí hàng tấn phút để cài đặt lại và sửa chữa chúng.

Vì vậy, tôi quyết định nâng cấp tất cả lên phiên bản mới nhất:

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

Lỗi này xảy ra do cách nó đã mã hóa trong gulpfile của bạn nhưng không phải do phiên bản không khớp. Vì vậy, ở đây bạn phải thay đổi 2 thứ trong gulpfile để phù hợp với Gulp phiên bản 4. Gulp 4 đã thay đổi cách khởi tạo tác vụ so với Phiên bản 3.

  1. Trong phiên bản 4, bạn phải xác định tác vụ dưới dạng một hàm, trước khi gọi nó là tác vụ gulp bằng tên chuỗi của nó. Trong V3:

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

Nhưng trong V4, nó sẽ giống như:

function serve() {
...
}
gulp.task('serve', gulp.series(sass));
  1. Như @Arthur đã đề cập, bạn cần thay đổi cách truyền các đối số cho hàm tác vụ. Nó giống như thế này trong V3:

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

Nhưng trong V4, nó phải là:

gulp.task('serve', gulp.series(sass));

1

Vấn đề là bạn đang sử dụng gulp 4 và cú pháp trong gulfile.js là gulp 3. Vì vậy, hãy hạ cấp gulp của bạn xuống 3.xx hoặc sử dụng cú pháp gulp 4.

Cú pháp Gulp 3:

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

Cú pháp Gulp 4:

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

Bạn có thể đọc thêm về tác vụ gulp và gulp trên: https://medium.com/@sudoanushil/how-to-write-gulp-tasks-ce1b1b7a7e81


-4

Các bước:

  1. "gulp": "^ 3.9.1",
  2. cài đặt npm
  3. kiểu nuốt chửng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.