O Task Runner Explorer não pode carregar tarefas

101

Estou usando o VS2015 e o Gulp. Abro o Task Runner Explorer e clico em atualizar, e isso aparece no log:

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)

Então, tento executar cmd.exe /c gulp --tasks-simpleno PowerShell, no mesmo diretório, e funciona bem - ele retorna uma lista de tarefas.

Também consigo executar minhas tarefas relacionadas ao SASS perfeitamente, então não tenho certeza por que isso está reclamando do SASS quando está sendo executado via VS, mas não diretamente na linha de comando.

Josh M.
fonte

Respostas:

314

Tive o mesmo problema ao migrar do VS2013 recentemente.

Como Josh observou em seu comentário aqui, o Visual Studio 2015 vem com uma versão mais antiga do Node. Caso você não queira ficar preso a qualquer versão do Node que está embutida no Visual Studio, você pode dizer a ele para usar a versão que você já instalou.

  • Vá para: Ferramentas> Opções> Projetos e soluções> Ferramentas externas da Web
  • Reordene para que $(PATH)fique acima$(DevEnvDir)\Extensions\Microsoft\Web Tools\External

Isso também se aplica a outras ferramentas como Grunt, Bower e Gulp.

Esta solução foi encontrada por Mads Kristensen aqui .

Para Visual Studio 2017, podemos encontrar a configuração em
Tools > Options > Projects and Solutions > Web Package Management > External Web Tools

M1Les
fonte
Sim, acabei fazendo a mesma coisa, mas esqueci de voltar aqui e adicionar um comentário um milhão e um. Obrigado!
Josh M.
1
Alguém colocou essa solução na mensagem de erro! # sorrisos #
Iain M Norman
1
No VS2017 é Ferramentas> Opções> Projetos e Soluções> Gerenciamento de Pacotes da Web> Ferramentas da Web Externas
James Ellis-Jones
5
No VS2017, você também precisa colocar $ (PATH) acima de $ (VSINSTALLERDIR) \ Web \ External
John Pankowicz
1
No VS2017, também tive que mover $ (PATH) acima. \ Node_modules \ .bin (Basicamente, tive que movê-lo para o topo.)
Doug
7

Parece que o gulp-sass procura o node-sass em um local diferente. Aqui está uma solução temporária.

  1. crie um novo diretório chamado win32-ia32-11 dentro de c: \ Projects \ Test \ node_modules \ gulp-sass \ node_modules \ node-sass \ vendor \

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

  3. Copie o arquivo win32-ia32-11_binding.node para c: \ Projects \ Test \ node_modules \ gulp-sass \ node_modules \ node-sass \ vendor \ win32-ia32-11 \ e renomeie-o para binding.node

Visual Studio Gulp - executor de tarefas

tansu
fonte
1
Ah, entendo. Parece que instalei a versão de 64 bits de todos os meus módulos de nó, mas deve estar sendo executado em um contexto de 32 bits, pois estou no VS, que é de 32 bits. Eu acho. E não consigo encontrar uma boa maneira de forçar a instalação de pacotes de 32 bits. Fiquei surpreso por não conseguir encontrar mais informações sobre esse assunto, mas parece que muitas pessoas provavelmente têm esse problema.
Josh M.
E também não consegui encontrar uma boa maneira de forçar o NPM a instalar a versão ia32 de todos os pacotes. Tentei criar um .npmrcarquivo com a opção de configuração apropriada, mas sem sorte. Mesmo rodando npm installem um console PS de 32 bits, as versões de 64 bits ainda estão sendo instaladas.
Josh M.
Isso é loucura. Em vez disso, instalei a versão de 32 bits do node e, em seguida, reinstalei todos os meus pacotes e, desta vez, a versão de 32 bits do node-sass está instalada, mas a ligação é em win32-ia32-14vez de win32-ia32-11- que por algum motivo é o que libsassestá procurando ...
Josh M.
A propósito, sua solução funciona, mas eu a vejo como um curativo - não quero que isso seja um passo que outros desenvolvedores terão de dar quando estiverem usando isso pela primeira vez!
Josh M.
1
Argh, isso é 0.10.31 32 bits: nodejs.org/dist/v0.10.31/node-v0.10.31-x86.msi
Josh M.
2

Tentei todas as soluções acima, mas não funcionou e encontrei outra solução aqui .

Você tem que forçar a execução do Visual Studio com sua versão Node.js:

  1. Vá para Tools> Optionsno Visual Studio 2015
  2. Vá para Projects and Solutions>External Web Tools
  3. Adicione o seguinte caminho: C:\Program Files\nodejs
Alex Nguyen
fonte
0

node-sass executa um script de instalação para baixar o binário necessário. Se não houver variáveis ​​de ambiente, variáveis ​​.npmrc ou argumentos de processo definidos, o binário é determinado usando a plataforma de processo atual, arquitetura e versão Node ABI. Portanto, se você executar a instalação do nó em um aplicativo e, em seguida, tentar executar o node-sass em um aplicativo com uma plataforma / arquitetura / ABI diferente, o binário não terá sido baixado. A solução é baixar manualmente o binário ou corrigir a versão binária usando uma variável de ambiente (SASS_BINARY_NAME) ou uma variável .npmrc (sass_binary_name)

Você pode ver a lógica para isso na função getBinaryPath em node-sass \ lib \ extensions.js

Veja também: O nó Sass não conseguiu encontrar uma ligação para o seu ambiente atual

Tevin
fonte