Не удалось загрузить Gulpfile.js

Средство выполнения задач Visual Studio не может загрузить файл gulp. Сейчас я использую VS2017 v15.9.4, однако проект был разработан несколько лет назад.

Failed to run "...\Gulpfile.js"...
cmd.exe /c gulp --tasks-simple
assert.js:350
    throw err;
    ^
AssertionError [ERR_ASSERTION]: Task function must be specified
    at Gulp.set [as _setTask] (...\node_modules\undertaker\lib\set-task.js:10:3)
    at Gulp.task (...\node_modules\undertaker\lib\task.js:13:8)
    at Object.<anonymous> (...\gulpfile.js:34:6)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)

Я заменил свой локальный адрес проекта на "..."

npm -v --> 6.4.1

node -v --> 10.14.2

gulp -v --> CLI version 2.0.1
            Local version 4.0.0

Содержание файла package.json:

{
  "version": "1.0.0",
  "name": "tratic",
  "private": true,
  "devDependencies": {
    "gulp": "github:gulpjs/gulp#4.0",
    "gulp-clean-css": "3.5.0",
    "gulp-concat": "2.6.1",
    "gulp-durandal": "1.1.7",
    "gulp-install": "^1.1.0",
    "gulp-uglify": "3.0.0",
    "gulp-util": "3.0.8",
    "rimraf": "2.6.1"
  },
  "dependencies": {
    "assert": "^1.4.1",
    "assert-js": "^0.20.0",
    "natives": "^1.1.5"
  },
  "scripts": {
    "gulp": "./node_modules/gulp/bin/gulp.js"
  }
}

Содержание gulpfile.js:

var gulp = require('gulp'),
    durandal = require('gulp-durandal'),
    rimraf = require('rimraf');

gulp.task('clean', function (cb) {
    rimraf('app/main-built.js', cb);
});

gulp.task('durandal', ['clean'], function () {
    durandal({
        baseDir: 'app',
        main: 'main.js',
        output: 'main-built.js',
        almond: true,
        minify: true
    })
    .pipe(gulp.dest('app'));
});

gulp.task('default', ['durandal']);

Я погуглил, и существующие решения не могут решить проблему. Есть некоторые связанные проблемы, но они не работают для меня.

Как решить проблему?

если вы нашли решение, вы можете написать его в качестве ответа вместо того, чтобы добавлять его в качестве редактирования к другим ответам

barbsan 11.01.2019 09:26

Так что же не так с вашим исходным кодом?

Mark 14.01.2019 20:23

@Mark Я использовал gulp 4 с синтаксисом gulp 3. Однако в функции durandal была еще одна проблема, которую я решил и отредактировал ответ ниже.

M.Mohabbati 15.01.2019 07:14

Да, ваша ошибка:: Должна быть указана функция задачи "была решена моим объяснением ниже. Проблема с дюранделем еще не решена вашим кодом.

Mark 15.01.2019 07:19

Спасибо @Mark, ваш ответ мне помог. сначала я нахожу синтаксическую ошибку из вашего ответа. не могли бы вы объяснить, в чем проблема? почему проблема с дюрандалом не была решена с помощью кода?

M.Mohabbati 15.01.2019 07:32

Поскольку gulp завершился ошибкой синтаксиса задачи - используя версию gulp3 gulp.task ('default', ['anyTaskHere']) - перед тем, как перейти к любым другим ошибкам, таким как проблема с плагином. Он просто потерпел неудачу и завершился, прежде чем добрался до любого другого кода. Взгляните на ссылку на насос, о которой я упоминал, ее легко добавить и, вероятно, вы получите номер строки и дополнительную информацию об этой ошибке.

Mark 15.01.2019 15:38

Gulp4 изменил синтаксис вызова задач - вы больше не можете использовать метод ['someTask'] - это ошибка в gulp4. Поскольку вы вызывали только одну задачу, вы можете использовать gulp.task ('default', 'durandal') или gulp.task ('default', gulp.series ('durandal'). Gulp4 имеет гораздо больше преимуществ, которые вам следует изучить. Например, синтаксис функции и экспорт.

Mark 15.01.2019 15:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
7
7 312
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте использовать этот обходной путь: https://github.com/ampproject/docs/issues/793 Понизьте gulp до этой версии 3.9.1.

Я делал это раньше, но это не помогло решить проблему, появились новые ошибки. Я попытался изменить свой файл gulp на v4. оно работает.

M.Mohabbati 09.01.2019 06:36

Должна быть указана функция задачи. я читаю лучше, он пропускает абстрактную функцию внутри задачи "по умолчанию".

Κωλζαρ 09.01.2019 09:58

gulp.task ('по умолчанию', ['durandal'], функция (par1, par2, ..., parN) {});

Κωλζαρ 09.01.2019 09:59

ты починил? и как?

Κωλζαρ 12.01.2019 08:55

пожалуйста, прочтите ответ, помеченный как правильный.

M.Mohabbati 13.01.2019 12:31

Этот синтаксис больше не разрешен в gulp4:

gulp.task('default', ['durandal']);

Использовать :

gulp.task('default', gulp.series('durandal'));

Аналогичным образом измените на:

gulp.task('durandal', gulp.series('clean', function (done) {
    durandal({
        baseDir: 'app',
        main: 'main.js',
        output: 'main-built.js',
        almond: true,
        minify: true
    })
    .pipe(gulp.dest('app'));
    done();
});

Кроме того, использование насос, вероятно, даст вам лучший отчет об ошибках, чем вы получаете без него.

Ответ принят как подходящий

Я пробовал вашу настройку, она действительно вызвала ошибку, подобную вашей. Я пошел к глоток документов и попробовал их версию gulpfile, и она сработала без проблем. Итак, я переписал ваш файл gulpfile, чтобы он соответствовал их примеру, и он работал хорошо. вот код:


    var gulp = require('gulp'),
        durandal = require('gulp-durandal'),
        rimraf = require('rimraf');

    var paths = {
        app: "./App/**/*.js",
        js: "./Scripts/**/*.js",
        css: "./Content/**/*.css",
        concatJsDest: "./Scripts/vendor-scripts.min.js",
        concatCssDest: "./Content/vendor-css.min.css"
    };

    function clean (cb) {
      rimraf('app/main-built.js', cb);
    }

    gulp.task('clean', clean);

    function runDurandal () {
      return durandal({
          baseDir: 'app',
          main: 'main.js',
          output: 'main-built.js',
          almond: true,
          minify: true,
          rjsConfigAdapter: function (rjsConfig) {
              rjsConfig.deps = ['text'];
              return rjsConfig;
          }
      })
      .pipe(gulp.dest('app'));
    }

    var build = gulp.series(clean, runDurandal);

    gulp.task('default', build);

В основном я переместил функции, которые вы используете в качестве задач, в переменные и использовал серию для запуска durandal.

тогда я попробовал npx gulp --tasks-simple и иметь правильный вывод

clean
default

Кстати, взгляните на npx, чтобы не устанавливать gulp глобально.

Надеюсь, это поможет!

Другие вопросы по теме