Task Runner Explorer 无法加载任务

Posted

技术标签:

【中文标题】Task Runner Explorer 无法加载任务【英文标题】:Task Runner Explorer can't load tasks 【发布时间】:2015-09-26 21:21:16 【问题描述】:

我正在使用 VS2015 和 Gulp。我打开 Task Runner Explorer 并点击刷新,这会显示在日志中:

Failed to run "C:\Projects\Test\Gulpfile.js"...
cmd.exe /c gulp --tasks-simple
Error: `libsass` bindings not found in C:\Projects\Test\node_modules\gulp-sass\node_modules\node-sass\vendor\win32-ia32-11\binding.node. Try reinstalling `node-sass`?
    at Object.sass.getBinaryPath (C:\Projects\Test\node_modules\gulp-sass\node_modules\node-sass\lib\extensions.js:148:11)
    at Object.<anonymous> (C:\Projects\Test\node_modules\gulp-sass\node_modules\node-sass\lib\index.js:16:36)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (C:\Projects\Test\node_modules\gulp-sass\index.js:163:21)
    at Module._compile (module.js:456:26)

所以我尝试在同一目录中的 PowerShell 中运行 cmd.exe /c gulp --tasks-simple,它运行良好 - 它返回一个任务列表。

我也能够很好地运行与 SASS 相关的任务,所以我不确定为什么当它通过 VS 而不是直接在命令行上运行时,它会抱怨 SASS。

【问题讨论】:

【参考方案1】:

我最近从 VS2013 迁移时遇到了同样的问题。

正如 Josh 在他的评论 here 中指出的那样,Visual Studio 2015 附带了旧版本的 Node.js。如果您不想被 Visual Studio 中内置的任何版本的 Node 卡住,您可以告诉它使用您已经安装的版本。

转到:工具 > 选项 > 项目和解决方案 > 外部 Web 工具 重新排序,使$(PATH) 高于$(DevEnvDir)\Extensions\Microsoft\Web Tools\External

这也适用于 Grunt、Bower 和 Gulp 等其他工具。

由 Mads Kristensen here 找到此解决方案。

对于 Visual Studio 2017,我们可以在 Tools &gt; Options &gt; Projects and Solutions &gt; Web Package Management &gt; External Web Tools

找到设置

【讨论】:

是的,我最终做了同样的事情,但忘记回到这里并添加一百万又一的评论。谢谢! 有人把这个解决方案放到错误信息中! #咧嘴笑# 在 VS2017 中是工具 > 选项 > 项目和解决方案 > Web 包管理 > 外部 Web 工具 在VS2017中,还需要将$(PATH)放在$(VSINSTALLERDIR)\Web\External之上 在 VS2017 中,我还必须将 $(PATH) 移到 .\node_modules\.bin 上方(基本上,我必须将它移到顶部。)【参考方案2】:

node-sass 运行安装脚本来下载所需的二进制文件。如果没有设置环境变量、.npmrc 变量或进程参数,则使用当前进程平台、架构和 Node ABI 版本确定二进制文件。因此,如果您在一个应用程序中运行 node install,然后尝试在具有不同平台/架构/ABI 的应用程序中运行 node-sass,则不会下载二进制文件。解决方案是手动下载二进制文件或使用环境变量 (SASS_BINARY_NAME) 或 .npmrc 变量 (sass_binary_name) 修复二进制版本

你可以在 node-sass\lib\extensions.js 的 getBinaryPath 函数中看到这个逻辑

另请参阅:Node Sass could not find a binding for your current environment

【讨论】:

【参考方案3】:

我已经尝试了以上所有解决方案,但都不起作用,我找到了另一个解决方案here。

您必须强制 Visual Studio 与您的 Node.js 版本一起运行:

    在 Visual Studio 2015 中转到 Tools > Options 转到Projects and Solutions > External Web Tools 添加以下路径:C:\Program Files\nodejs

【讨论】:

【参考方案4】:

解决我的问题的唯一解决方案是重新安装 NPM Task Runner。 您可以从以下市场链接下载它。https://marketplace.visualstudio.com/items?itemName=MadsKristensen.NPMTaskRunner

【讨论】:

【参考方案5】:

gulp-sass 似乎在不同的位置搜索 node-sass。这是一个临时解决方案。

    在 c:\Projects\Test\node_modules\gulp-sass\node_modules\node-sass\vendor\ 中创建一个名为 win32-ia32-11 的新目录

    转到 https://github.com/sass/node-sass-binaries 并下载 win32-ia32-11_binding.node。

    将 win32-ia32-11_binding.node 文件复制到 c:\Projects\Test\node_modules\gulp-sass\node_modules\node-sass\vendor\win32-ia32-11\ 并重命名为 binding.node

【讨论】:

啊,我明白了。看来我已经安装了所有节点模块的 64 位版本,但它必须在 32 位上下文中运行,因为我在 32 位的 VS 中。我猜。而且我似乎找不到强制安装 32 位软件包的好方法。有点惊讶我找不到关于这个主题的更多信息,似乎很多人可能会遇到这个问题。 而且我也找不到强制 NPM 安装所有包的 ia32 版本的好方法。我尝试使用适当的配置选项创建.npmrc 文件,但没有运气。即使在 32 位 PS 控制台中运行 npm install,64 位版本仍在安装中。 这太疯狂了。我安装了 32 位版本的 node,然后重新安装了我所有的包,这次安装了 32 位版本的 node-sass,但绑定是 win32-ia32-14 而不是 win32-ia32-11 - 出于某种原因,这就是 @987654328 @正在寻找... 顺便说一句,您的解决方案有效,但我认为它是一个创可贴——我不希望这是其他开发人员第一次启动它时必须采取的步骤! 啊,那是 0.10.31 32 位:nodejs.org/dist/v0.10.31/node-v0.10.31-x86.msi

以上是关于Task Runner Explorer 无法加载任务的主要内容,如果未能解决你的问题,请参考以下文章