#javascript #node.js #gulp
#javascript #node.js #gulp
Вопрос:
Я попытался обновить приведенный ниже файл gulp до версии Gulp v4 с версии v3, но по-прежнему получаю сообщение об ошибке: AssertionError [ERR_ASSERTION]: Task never defined: client
Не уверен, чего мне не хватает, но понимаю, что функции могут быть написаны неправильно. Я считаю, что последовательные задачи верны: gulp.task('build', gulp.series('client', 'sass'));
например.
// gulpfile.js
var gulp = require('gulp'),
concat = require('gulp-concat'),
browserify = require('gulp-browserify'),
rename = require('gulp-rename'),
nodemon = require('gulp-nodemon'),
sass = require('gulp-sass');
gulp.task('build', gulp.series('client', 'sass'));
gulp.task('watch', gulp.series('client-watch', 'sass-watch'));
gulp.task('server', function () {
nodemon({
script: 'server/index',
ext: 'js json'
});
});
gulp.task('client', function () {
gulp.src('client/js/main.js')
.pipe(browserify({
transform: ['hbsfy'],
extensions: ['.hbs']
}))
.pipe(rename('hearthclone.js'))
.pipe(gulp.dest('./client/build'));
});
gulp.task('client-watch', function () {
gulp.watch('client/js/**/*.js', ['client']);
});
gulp.task('sass', function () {
gulp.src('client/**/*.scss')
.pipe(sass())
.pipe(concat('style.css'))
.pipe(gulp.dest('client/assets/css'));
});
gulp.task('sass-watch', function () {
gulp.watch('client/**/*.scss', ['sass']);
});
gulp.task('default', gulp.series('build', 'server', 'watch'));
Ответ №1:
Когда вы используете gulp.task
форму определения задач (а не как функции), вы не можете ссылаться на эти имена задач до тех пор, пока они не будут объявлены. Это было бы forward reference
(см. Ниже). Так что просто поместите свой
gulp.task('build', gulp.series('client', 'sass'));
gulp.task('watch', gulp.series('client-watch', 'sass-watch'));
после того, как все эти задачи были определены. Я рекомендую прямо перед строкой default
задачи.
См. https://gulpjs.com/docs/en/api/series#forward-references
Пересылка ссылок
Прямая ссылка — это когда вы составляете задачи, используя строковые ссылки, которые еще не были зарегистрированы. Это было обычной практикой в более старых версиях, но эта функция была удалена для ускорения выполнения задач и содействия использованию именованных функций.
В более новых версиях вы получите сообщение об ошибке с сообщением «Задача не определена», если вы попытаетесь использовать прямые ссылки. Это может возникнуть при попытке использовать экспорт для регистрации задач и составления задач по строкам. В этой ситуации используйте именованные функции вместо ссылок на строки.