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 > Options > Projects and Solutions > Web Package Management > 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 无法加载任务的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2017 Task Runner Explorer 未在发布时运行事件
markdown 在Mac上安装Robo PHP Task Runner
markdown 在Mac上安装Robo PHP Task Runner