【问题标题】:Gulpfile.js failed to loadGulpfile.js 无法加载
【发布时间】:2019-05-20 11:21:30
【问题描述】:

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

我用谷歌搜索,现有的解决方案无法解决问题。有一些相关的问题,但对我不起作用。

我该如何解决这个问题?

【问题讨论】:

  • 如果您找到了解决方案,您可以将其写为答案,而不是将其作为编辑添加到其他答案中
  • 那么你的初始代码出了什么问题?
  • @Mark 我使用 gulp 4 和 gulp 3 语法。然而,我解决了 durandal 函数中的另一个问题并编辑了下面的答案。
  • 是的,您的错误::必须指定任务函数”已通过我下面的解释解决。您的代码尚未解决 durandel 问题。
  • 谢谢@Mark,您的回答帮助了我。首先,我从您的答案中发现语法错误。你能解释一下是什么问题吗?为什么代码没有解决 durandal 问题?

标签: javascript node.js npm gulp durandal


【解决方案1】:

尝试使用此解决方法:https://github.com/ampproject/docs/issues/793 将 gulp 降级到此版本 3.9.1。

【讨论】:

  • 我之前做过,但无法解决问题,我遇到了一些新错误。我试图更改我的 gulp 文件并将其更改为 v4。它有效。
  • 必须指定任务函数。我读得更好,它错过了“默认”任务中的抽象函数。
  • gulp.task('default', ['durandal'], function(par1, par2, ..., parN){});
  • 你修好了吗?以及如何?
  • 请查看标记为正确的答案。
【解决方案2】:

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

此外,使用 pump 可能会比不使用它时提供更好的错误报告。

【讨论】:

    【解决方案3】:

    我已经尝试过你的设置,它确实抛出了像你这样的错误。 我去了gulp docs 并尝试了他们的 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。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多