Task Runner Explorer无法加载任务


101

我正在使用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)

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

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

Answers:


314

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

随着约什在他的评论中指出这里的Visual Studio 2015年附带旧版本的节点。如果您不想陷入Visual Studio内置的任何版本的Node中,可以告诉它使用已经安装的版本。

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

这也适用于其他工具,例如Grunt,Bower和Gulp。

在这里找到Mads Kristensen的解决方案。

对于Visual Studio 2017,我们可以在以下位置找到设置
Tools > Options > Projects and Solutions > Web Package Management > External Web Tools


是的,我最终还是做同样的事情,但是忘了回到这里,并发表一百万零一条评论。谢谢!
Josh M.

1
有人将此解决方案纳入错误消息!#grins#
伊恩·诺曼

1
在VS2017中,它是工具>选项>项目和解决方案> Web程序包管理>外部Web工具
James Ellis-Jones

5
在VS2017中,还需要将$(PATH)放在$(VSINSTALLERDIR)\ Web \ External
之上

1
在VS2017中,我还必须将$(PATH)移动到。\ node_modules \ .bin(基本上,我必须将其移动到顶部。)
Doug

7

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

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

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

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

Visual Studio Gulp-任务运行器


1
知道了 看来我已经安装了所有节点模块的64位版本,但是由于我使用的是32位VS,因此它必须在32位上下文中运行。我猜。而且我似乎找不到强制安装32位软件包的好方法。令我惊讶的是我找不到有关此主题的更多信息,似乎很多人都可能会遇到此问题。
Josh M.

而且我也找不到强迫NPM安装所有软件包的ia32版本的好方法。我尝试.npmrc使用适当的config选项创建文件,但是没有运气。即使npm install在32位PS控制台中运行,仍会安装64位版本。
Josh M.

这太疯狂了。我安装了32位版本的node,然后重新安装了我的所有软件包,这次安装了32位版本的node-sass,但是绑定win32-ia32-14不是win32-ia32-11-出于某种原因,这libsass是在寻找...
Josh M.15年

顺便说一句,您的解决方案有效,但我认为这是一个创可贴-我不希望这是其他开发人员在首次提出此要求时必须采取的步骤!
Josh M.

1
哎呀,那是0.10.31 32位:nodejs.org/dist/v0.10.31/node-v0.10.31-x86.msi
Josh M.

2

我已经尝试了所有上述解决方案,但是没有用,我在这里找到了另一个解决方案。

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

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


0

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

您可以在node-sass \ lib \ extensions.js中的getBinaryPath函数中查看此逻辑

另请参阅:Node Sass找不到您当前环境的绑定

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.