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?



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?


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


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.


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.


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.

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.


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

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.


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.


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");

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.


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).


2

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


1

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


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.


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"


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.


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


-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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.