任务运行器资源管理器无法加载任务

我用的是 VS2015和 Gulp。我打开任务运行器资源管理器,点击刷新,这在日志中显示出来:

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 相关任务,所以我不知道为什么这是抱怨 SASS 时,它是通过 VS 运行,但不直接在命令行。

32612 次浏览

It seems gulp-sass searchs node-sass in a different location. Here is a temporary solution.

  1. create a new directory named win32-ia32-11 inside c:\Projects\Test\node_modules\gulp-sass\node_modules\node-sass\vendor\

  2. Goto https://github.com/sass/node-sass-binaries and download win32-ia32-11_binding.node.

  3. Copy win32-ia32-11_binding.node file to c:\Projects\Test\node_modules\gulp-sass\node_modules\node-sass\vendor\win32-ia32-11\ and rename it to binding.node

Visual Studio Gulp - Task Runner

I had the same problem migrating from VS2013 recently.

As Josh noted in his comment here Visual Studio 2015 ships with an older version of Node. In case you don't want to get stuck with whatever version of Node is built into Visual Studio, you can tell it to use the version you have already installed.

  • Go to: Tools > Options > Projects and Solutions > External Web Tools
  • Reorder so that $(PATH) is above $(DevEnvDir)\Extensions\Microsoft\Web Tools\External

This also applies to other tools like Grunt, Bower and Gulp.

Found this solution by Mads Kristensen here.

For Visual Studio 2017, we can find the setting at
Tools > Options > Projects and Solutions > Web Package Management > External Web Tools

I have tried all above solutions but it doesn't work and I found another solution here.

You have to force Visual Studio run with your Node.js version:

  1. Go to Tools > Options in Visual Studio 2015
  2. Go to Projects and Solutions > External Web Tools
  3. Add the following path: C:\Program Files\nodejs

The only solution that solved my problem was re-installing NPM Task Runner. You can download it from following link at marketplace.
https://marketplace.visualstudio.com/items?itemName=MadsKristensen.NPMTaskRunner

node-sass runs an install script to download the required binary. If there are no environment variables, .npmrc variables or process arguments set then the binary is determined by using the current process platform, architecture and Node ABI version. Therefore, if you run node install in one application and then try to run node-sass in an application with a different platform/architecture/ABI, the binary won't have been downloaded. The solution is to manually download the binary or to fix the binary version using an environment variable (SASS_BINARY_NAME) or a .npmrc variable (sass_binary_name)

You can see the logic for this in the getBinaryPath function in node-sass\lib\extensions.js

See also: Node Sass could not find a binding for your current environment