Visual Studio任务运行器资源管理器 - 引用错误:原始值未定义。

7

我已升级到Visual Studio 16.6.3。当我打开任务运行器浏览器时,它无法加载我的gulp文件,在任务运行器输出窗口中,我可以看到...

Failed to run "E:\Projects\...\Gulpfile.js"...
cmd.exe /c gulp --tasks-simple
fs.js:35
} = primordials;
    ^
ReferenceError: primordials is not defined
    at fs.js:35:5
    at req_ (E:\Projects\...\node_modules\natives\index.js:143:24)
    at Object.req [as require] (E:\Projects\...\node_modules\natives\index.js:55:10)
    at Object.<anonymous> (E:\Projects\...\node_modules\graceful-fs\fs.js:1:37)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Module.require (internal/modules/cjs/loader.js:1044:19)
    at require (internal/modules/cjs/helpers.js:77:18)

我随后谷歌了一下,发现这是由于 node 12 和 gulp 3 不兼容导致的问题,建议升级到版本4。因此,我更新了我的 package.json 文件,并将 "gulp": "3.9.1" 更改为 "gulp": "4.0.2"。当我进入任务浏览器时,在任务运行器输出窗口中看到以下内容...

Failed to run "E:\Projects\...\Gulpfile.js"...
cmd.exe /c gulp --tasks-simple
AssertionError [ERR_ASSERTION]: Task function must be specified
    at Gulp.set [as _setTask] (E:\Projects\...\node_modules\undertaker\lib\set-task.js:10:3)
    at Gulp.task (E:\Projects\...\node_modules\undertaker\lib\task.js:13:8)
    at Object.<anonymous> (E:\Projects\...\gulpfile.js:86:6)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Module.require (internal/modules/cjs/loader.js:1044:19)
    at require (internal/modules/cjs/helpers.js:77:18)
    at requireOrImport (E:\Projects\...\node_modules\gulp\node_modules\gulp-cli\lib\shared\require-or-import.js:19:11) {
  generatedMessage: false,
  code: 'ERR_ASSERTION',
  actual: false,
  expected: true,
  operator: '=='

我谷歌了一下,建议将gulp降级到3版本...只希望打开任务运行器资源管理器不用花费4个小时来解决依赖问题。
此外,在Visual Studio包管理器控制台内运行“npm install”(无论是提升权限还是非提升权限)似乎只会导致一堆权限错误。我只能在提升的powershell窗口中成功运行npm install。
有人有这些问题的解决方案吗?
Package.json如下...
{
  "version": "1.0.0",
  "name": "asp.net",
  "private": true,
  "devDependencies": {
    "del": "4.1.1",
    "gulp": "3.9.1",
    "gulp-concat": "^2.6.1",
    "gulp-config": "0.3.0",
    "gulp-cssmin": "^0.2.0",
    "gulp-csso": "1.1.0",
    "gulp-htmlmin": "5.0.1",
    "gulp-imagemin": "2.4.0",
    "gulp-less": "4.0.1",
    "gulp-plumber": "1.2.1",
    "gulp-uglify": "3.0.2",
    "gulp.spritesmith": "^6.10.0",
    "merge-stream": "2.0.0",
    "vinyl-buffer": "1.0.1"
  }
}

编辑:尝试将Node从12.6.2升级到12.18.2但未成功。

编辑:尝试将Node从12.6.2升级到14.5.0但未成功。


建议是将gulp降级到版本3,这是错误的建议。Task function must be specified是从gulp v3迁移到gulp v4时常见的错误,通常很容易修复。但是您必须展示您的gulp v4 gulpfile.js以获得进一步的帮助。 - Mark
3个回答

18

我发现了一个解决方案,它不需要降级 nodegulp来源

在与 package.json 同级别的位置创建一个名为 npm-shrinkwrap.json 的文件,并将其填充如下内容:

{
    "dependencies": {
        "graceful-fs": {
            "version": "4.2.2"
       }
    }
}

现在删除 node_modules 文件夹并在同一文件夹中运行 npm install,然后您应该是良好的。(在 Visual StudioTask Runner Explorer 中重新加载。)


如果有其他人可以验证这个答案,我会将其标记为正确的。 - Mick
1
有机会测试了您的答案,设置了一台新机器并验证了您指定的步骤可行。 - Mick
对我有用,谢谢。我已经寻找这个答案一段时间了。 - Johnathan Li

5
我在使用 Visual Studio 2022 时遇到问题。自动运行的 Task Runner 运行了我设置的 gulp 任务,但出现了问题。Visual Studio 自带了自己的 Node.js 版本,默认用于 Task Runner Explorer。我需要配置 Visual Studio 以使用我安装的 node 版本。这里的 Joe Davis (Web tools, Microsoft) 回答解释了如何进行配置:

Visual Studio 自带了自己的 Node.js 版本,默认用于 Task Runner Explorer。如果你在机器上安装了另一个版本的 Node.js,你可以通过更改“工具位置”的“外部工具位置”列表中的顺序将“$(PATH)”移至顶部来使用该版本。

enter image description here


这个答案更方便,因为它不需要修改/重新加载您的节点模块,并且在您想要从命令行运行gulp任务时不会产生潜在干扰。 - Dillie-O

0
我找到的解决方案是降级到NodeJs v11.15.0并使用gulp 3.9.1。
如果有人有更好的选择,我很乐意听听。

你最终解决了吗? - Common Man
@CommonMan 上面被接受的答案就是解决方案。 - Mick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接