Nodejs não consegue encontrar o módulo instalado no Windows

240

No momento, estou aprendendo nodejs no Windows. Vários módulos são instalados globalmente com o npm.cmd, e o nodejs falhou ao localizar os módulos instalados. Veja o jade, por exemplo,

npm install jade -g

O Jade está instalado no diretório "C:\Program Files (x86)\nodejs\node_modules", mas o código a seguir falhará com um "Cannot find module 'jade'"erro,

var jade = require('jade');

No entanto, o código será executado com sucesso quando o jade estiver instalado localmente (sem a opção -g no npm). Não quero usar módulos instalados localmente, é um desperdício de espaço em disco para mim. Como posso fazer com que os módulos instalados globalmente funcionem no Windows?

Cosmore
fonte
3
@AmolMKulkarni: não sei como isso é relevante aqui. Adicionar '.js' ao requisito não resolve o problema no Windows.
Dan Dascalescu
1
@ DanDascalescu: Acho que você não entendeu a resposta. O código fornecido nessa resposta é um código do Node.js, que mostra como fica o pacote que você precisa. Portanto, se você entender onde e como ele procura os arquivos, poderá resolver seu problema mais facilmente.
Amol M Kulkarni
De acordo com stackoverflow.com/questions/5817874/… npm install forever -g #
Sharif Yazdian

Respostas:

349

Adicione uma variável de ambiente chamada NODE_PATHe defina-a como %USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10) ou sempre que o npm acabar instalando os módulos no seu estilo Windows. Para fazer isso de uma vez por todas, adicione-a como uma variável do sistema na guia Avançado da caixa de diálogo Propriedades do sistema (execução control.exe sysdm.cpl,System,3).

A solução rápida no Windows 7+ é apenas executar:

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

Vale ressaltar que NODE_PATHé usado apenas na importação de módulos nos aplicativos Node. Quando você quiser usar os binários dos módulos instalados globalmente na sua CLI, precisará adicioná-lo também à sua PATH, mas sem node_modulesparte (por exemplo, %AppData%\npmno Windows 7/8/10).


História antiga

Eu sou praticamente novo no node.js, então não posso estar totalmente certo, mas pela minha experiência, funciona da seguinte maneira:

  1. -g não é uma maneira de instalar bibliotecas globais, é apenas uma maneira de colocá-las no caminho do sistema para que você possa chamá-las na linha de comando sem escrever o caminho completo para elas. É útil, por exemplo, o aplicativo do nó está convertendo arquivos locais, como menos - se você o instalar globalmente, poderá usá-lo em qualquer diretório.
  2. O próprio node.js não olhou para o diretório global npm, está usando outro algoritmo para encontrar os arquivos necessários: http://nodejs.org/api/modules.html#modules_file_modules (basicamente, ele verifica todas as pastas no caminho, iniciando da pasta atual para node_modules e a verifica).

Consulte a pergunta semelhante para obter mais detalhes: Como instalo um módulo globalmente usando o npm?

Alexey Ivanov
fonte
17
Muito obrigado, os links que você forneceu são muito úteis, sou muito mais claro agora, embora o algoritmo de busca de módulos pareça um pouco complicado. Finalmente, uso a variável de ambiente NODE_PATH para referenciar o caminho do módulo global set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modulese funciona como esperado. É estranho que os módulos instalados globalmente estejam posicionados em '% USERPROFILE% \ Application Data \ npm \ node_modules' no Windows. Enquanto isso, não pode haver aspas no NODE_PATH.
precisa saber é o seguinte
2
Feliz em ajudar. A alteração de NODE_PATH não quebrou o caminho para os módulos node.js padrão, como o FS?
Alexey Ivanov
2
Mesmo eu queria saber por que o meu C:\Program Files\nodejs\node_modules\npm\node_modulesnão tem o módulo que eu só instalado usando npm install -g expresse estava disponível emC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske
1
no Windows 8, o caminho é%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar
9
Se você quiser descobrir onde seu diretório node_modules globais é, execute o comando npm list -g. A primeira linha de saída será o pai do diretório global node_modules - em outras palavras, o diretório global node_modules é {output}\node_modules. Ela também imprime o diretório de instalação quando você executarnpm install --global {xyz}
cowlinator
34

se você estiver na plataforma windows7, talvez deva alterar o NODE_PATH assim: %AppData%\npm\node_modules

Jack
fonte
7
está em appdata \ roaming no windows 8 também
JonnyRaa
6
Estou no Windows 8.1 com npm 2.5.1 e tenho meu NODE_PATH definido como documentado, mas ainda não consigo encontrar meus pacotes instalados. Pensamentos?
JaKXz
5
No Windows 10, deve ser apenas% AppData% \ npm
gkiely 27/10
No meu caso (W10), era% AppData% \ Roaming \ npm
Hinrich
32

Eu sei que posso acordar um zumbi, mas acho que isso ainda é um problema, se você precisar de acesso global aos módulos de nó no Windows 7, precisará adicioná-lo ao seu caminho de variável global:

C:\Users\{USER}\AppData\Roaming\npm

Importante: só isso sem a node_modulesparte, demorei meia hora para ver isso.

Vitaliy Terziev
fonte
4
Como alternativa, para usuários do Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson
4
Obrigado pelo conselho sobre como remover a node_modulespeça, estava lutando com isso também!
danguilherme 9/09/16
20

Para fazê-lo funcionar no Windows 10, resolvi adicionando a pasta %USERPROFILE%\AppData\Roaming\npmao meu PATH. Tendo \node_modulesacrescentado assim: %USERPROFILE%\AppData\Roaming\npm\node_modules\não funcionou para mim.

Andi-lo
fonte
7
Ou, mais simplesmente, `% AppData% \ npm`
Dan Diplo
Cara, é estranho que funcionou! Venho pesquisando esse problema há dois dias, literalmente. Esta é a solução mais obscura que eu tentei e a primeira que funcionou. Muito obrigado.
Will
sim basta adicionar ao pathvariabele ambiente, então podemos executá-lo diretamente no Windows 10
Zhu Xiaohu
1
Seria mostrando como realmente executar isto com um exemplo, em vez de dizer coisas como "basta adicionar a ..."
Gabe Hiemstra
14

Vou apenas citar a postagem no blog deste nó ...

Em geral, a regra geral é:

  • Se você estiver instalando algo que deseja usar no seu programa, usando require ('qualquer'), instale-o localmente, na raiz do seu projeto.
  • Se você estiver instalando algo que deseja usar no shell, na linha de comando ou algo assim, instale-o globalmente, para que seus binários acabem na sua variável de ambiente PATH.

...

Obviamente, existem alguns casos em que você deseja fazer as duas coisas. Coffee-script e Express são bons exemplos de aplicativos que possuem uma interface de linha de comando, além de uma biblioteca. Nesses casos, você pode executar um dos seguintes procedimentos:

  1. Instale nos dois lugares. Sério, você está com pouco espaço em disco? Está tudo bem, sério. São pequenos programas JavaScript.
  2. Instale-o globalmente e, em seguida, npm link coffee-script ou npm link express (se você estiver em uma plataforma que suporte links simbólicos.) Em seguida, você só precisará atualizar a cópia global para atualizar também todos os links simbólicos.
marko
fonte
10
They’re tiny JavaScript programs.Algumas dessas bibliotecas certamente não são pequenas!
UpTheCreek 21/01
1
@UpTheCreek Estou confiante de que ele estava se referindo ao tamanho no escopo do espaço em disco. Eles são arquivos de texto. Eles são objetivamente pequenos.
Phillip Copley
12

Para abreviar, use npm link jadeno diretório do aplicativo.

Sơn Trần-Nguyễn
fonte
4
Parece npm link jadeque não pode funcionar no Windows, o npm retorna uma mensagem de erro da seguinte maneira:npm ERR! Error: npm link not supported on windows
Cosmore 7/12/12
1
Ele faz agora, como para a versão v0.8.9
Gianfranco P.
@eyonddoor: você precisa executar a npm linkpartir de uma janela de comando do administrador.
precisa saber é
12

Tentou adicionar / editar variáveis ​​de ambiente e chegou à conclusão de que:

  1. Editar / adicionar User variables(da caixa superior) em vez de System variables(da parte inferior); caso contrário, você precisará "executar como administrador" para que ele funcione.
  2. Anexe ;%AppData%\npma Pathfim de usá-lo como uma ferramenta de linha de comando (se houver suporte, como jshinte grunt-cli).
  3. Crie NODE_PATHe defina-o %AppData%\npm\node_modulesem require('<pkg_name>')scripts sem instalá-lo no diretório do projeto. (Mas npm linké sugerido para esse requisito se você estiver trabalhando em sistemas operacionais com o mklinkVista e os mais recentes.)

Ambiente de teste:

  • Win 7 (Ent., 64 bits, SP1), Node.js 4.2.4, npm 2.14.12
  • Win 8.1 (Ent., 64 bits), Node.js 0.10.30, npm 1.4.21
Kong Kao
fonte
9

Eu tive um tempo terrível para que módulos globais funcionassem. Eventualmente, adicionei explicitamente C:\Users\yourusername\AppData\Roaming\npmà variável PATH em Variáveis ​​do sistema. Eu também precisava que essa variável viesse antes da variável de caminho nodejs na lista.

Estou executando o Windows 10.

John Galt
fonte
essa é a única coisa que funcionou para mim. executando no windows 8
charlie carver
1
Esta é a única coisa que funcionou para mim também, obrigado!
Dev0on 30/09/19
6

Corri para esse problema no Windows 7, executando

npm install -g gulp

como administrador enquanto estiver conectado como um usuário normal.

Solução: Ao executar a mesma instalação que o usuário normal (não "executar como administrador" para o cmd), tudo estava bem. Eu acho que está relacionado ao caminho padrão de instalação e pesquisa.

SCBuergel.eth
fonte
1
Para esclarecer um pouco mais esse ponto ... Quando o Node é instalado como administrador, ele atualiza o caminho do sistema para incluir uma referência à pasta do módulo de nó global do administrador. Quando um novo usuário instala algo globalmente, ele é instalado em uma pasta de módulo de nó diferente. Cada usuário que não seja o usuário que instalou o Nó precisará atualizar seu caminho para incluir sua pasta de módulo de nó global. Se você instalar e usar o nó na mesma conta, isso não será necessário.
dpsthree
O Windows 8.1 Pro com v6.9.4 nodejs, para definir o caminho de execução: C: \ Program Files \ nodejs \ nodevars.bat
Robot70
4

Da minha experiência com o win8.1 npm instala os módulos, C:\Users\[UserName]\AppData\Roaming\npm\node_modules mas os pesquisa dumply C:\Users\[UserName]\node_modules.

Um módulo de referência de solução simples no aplicativo por caminho completo:

var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");
Saulius
fonte
4

Para o Windows, todos disseram que você deveria definir variáveis ​​de ambiente para os módulos nodejs e npm, mas você sabe por quê? Para alguns módulos, eles possuem a ferramenta de linha de comando; após a instalação do módulo, existe o arquivo [module] .cmd em C: \ Arquivos de Programas \ nodejs e é usado para iniciar o comando window. Portanto, se você não adicionar o caminho que contém o arquivo cmd às variáveis ​​de ambiente % PATH% , não será iniciado com êxito pela janela de comando.

Kiki.J.Hu
fonte
2

Eu tive o mesmo problema, tentando instalar o bower com npm install -g bower

Eu acho que isso ocorreu porque o nó foi instalado por outro usuário , não eu.

Desinstalei o nó e reinstalei-o. Durante a instalação, vi este texto para a opção Add to PATH> npm modules :

Mensagem na instalação do nó

insira a descrição da imagem aqui

Após a instalação do nó, executei npm install -g bowernovamente. E agora o caramanchão funciona.

Claro que não é necessário reinstalar o nó com o próprio usuário, como eu. A solução deve ser via variáveis NODE_PATH ou PATH , como outros usuários explicaram.

Isso é apenas para observar que esse problema ocorre apenas se o nó tiver sido instalado por outro usuário (ou se durante a instalação a opção Adicionar ao PATH> módulos npm não tiver sido marcada).

Gregorio
fonte
2

Para mim trabalhou no Windows 10 npm config set prefix %AppData%\npm\node_modules

Bojan Mitic
fonte
1

Como alternativa, você pode adicionar ~/.npmrco prefixo correto . Eu tenho C:\Program Files\nodejspara 64 Win7.

dmi3y
fonte
1

Eu me deparei com essa pergunta porque quero usar o node.js com o visual studio 2015 no meu novo computador com o Windows 10. Eu usei o node.js no Windows 7 e 8 e 8.1 Nunca foi um problema que o node.js encontrou um módulo. Eu uso o node.js 0.10.39 herdado porque tenho que usar esta versão devido ao módulo serial e RFXCOM.

A resposta para o Windows 10 é definir o NODE_PATH nas variáveis ​​de ambiente com C: \ Users \ User \ node_modules.

wetlip
fonte
1
ER não. (Windows 10 aqui ..) Vejo alguns módulos em C:\Users\User\node_modules Vejo alguns módulos em C:\Users\User\AppData\Roaming\npm\node_modules Vejo alguns módulos em C:\Users\User\node_modules Também localizado em C:\Program Files (x86)\nodejs\node_modules\npm\node_modules Não tenho certeza de como isso acontece. Qual é qual e por que eles fizeram dessa maneira?
zipzit 27/02
1

Para o Windows 10, tive que instalar localmente o gulp na pasta:

C: \ Usuários \ minhaacontagem \ AppData \ Roaming \ npm \ node_modules

npm install gulp

Isso corrigiu meu problema de "gulp não é reconhecido"

Sites da Bizz
fonte
0

Basta baixar e reinstalar o nó a partir disso e isso corrigirá todos os problemas de caminho.

Não se esqueça de reiniciar seu prompt de comando ou terminal.

Mahendra
fonte
0

Todas as respostas acima não funcionaram para mim. A única coisa que funcionou eventualmente foi adicionar o% AppData% \ npm à variável Path do ambiente E excluir os dois arquivos ng em C: \ Arquivos de Programas \ nodejs.

Os pacotes ng não foram instalados em C: \ Arquivos de Programas \ nodejs \ node_modules, portanto, era evidente que o uso do binário ng do diretório nodejs não funcionaria.

Não sei por que ele procurou neste diretório, porque eu já configurei - variável de ambiente PATH - .npmrc em C: \ Users \ MyUser - Tentei adicionar variáveis ​​de sistema e / ou NODE_PATH

devqon
fonte
-4

se você estiver usando o Windows, são necessárias algumas etapas, 1) crie um arquivo chamado package.json

 {
  "name": "hello"
, "version": "0.0.1"
, "dependencies": {
    "express": "*"
  }
}

onde hello é o nome do pacote e * significa a versão mais recente da sua dependência

2) codifique para o diretório do projeto e execute o seguinte comando

instalação npm

Instala as dependências

Subbu
fonte
4
Isso não o instala globalmente (o que a pergunta faz). Isso puxa a dependência para o aplicativo
bryanmac
Eu tentei de tudo listado acima para tentar convencer a instalação do node.js a reconhecer os módulos instalados globalmente, e NENHUM funciona. Mesmo depois de desinstalar e reinstalar o nó (v8.11.3 LTS), toda vez que tento emitir o comando require ("mongodb") em um script node.js, recebo o erro MESMO: "Não é possível encontrar o módulo mongodb". No entanto, se eu emitir o comando "npm ll -g mongodb", o NPM informa que o módulo está instalado. Alguém pode me entregar alguma inflamação que funcione com esse problema?
David Edwards
ATUALIZAÇÃO: Saulius acima forneceu uma solução alternativa que realmente funciona, ou seja, especificar o caminho completo para o módulo na instrução JavaScript require. Mas se a observação declarada sobre a pesquisa de node.js na pasta errada por módulos instalados está correta, alguém pode alertar os desenvolvedores do node.js. sobre isso? Porque o problema ainda está afetando a v8.11.3 LTS.
David Edwards