Estou tentando configurar o Node no Mac OSX Lion. Tudo parece funcionar bem, mas não consigo importar módulos da minha pasta de módulos globais. Eu recebo o erro
Error: Cannot find module <module>
Se eu executar isso node -e require.paths
:, a resposta que recebo é:
[ '/usr/local/lib/node_modules',
'/Users/Me/.node_modules',
'/Users/Me/.node_libraries',
'/usr/local/Cellar/node/0.4.12/lib/node' ]
O que está correto, meus módulos estão realmente instalados em / usr / local / lib / node_modules. Quando tento executar um script, no entanto, estou recebendo o seguinte:
Error: Cannot find module 'socket.io'
at Function._resolveFilename (module.js:326:11)
at Function._load (module.js:271:25)
at require (module.js:355:19)
at Object.<anonymous> (/Users/Me/node/server.js:2:10)
at Module._compile (module.js:411:26)
at Object..js (module.js:417:10)
at Module.load (module.js:343:31)
at Function._load (module.js:302:12)
at Array.<anonymous> (module.js:430:10)
at EventEmitter._tickCallback (node.js:126:26)
Meu .bash_profile fica assim:
export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"
Realmente apreciaria alguma ajuda, não sei por que não consigo importar nenhuma biblioteca.
npm link
) pode ser encontrada aqui: stackoverflow.com/a/15646750/2671392Respostas:
Se você estiver usando npm> = 1.0, poderá
npm link <global-package>
criar um link local para um pacote já instalado globalmente. ( Advertência: o sistema operacional deve oferecer suporte a links simbólicos. )No entanto, isso não vem sem seus problemas.
Como alternativa, você pode instalar os pacotes localmente e globalmente.
Para informações adicionais, consulte
fonte
npm
o cache (que reside~/.npm
) facilitará o processo de reinstalação realizado em diferentes locais.O Node.js usa a variável de ambiente
NODE_PATH
para permitir a especificação de diretórios adicionais a serem incluídos no caminho de pesquisa do módulo. Você pode usar-npm
se para informar onde os módulos globais estão armazenados com onpm root -g
comando Então, juntando esses dois, você pode garantir que os módulos globais sejam incluídos no seu caminho de pesquisa com o seguinte comando (no Linux-ish)export NODE_PATH=$(npm root --quiet -g)
fonte
NODE_PATH
dica da variável de ambiente. Isso ajudou muito!NODE_PATH
o caminho posix equivalente para fazer o npm funcionar no MSYS2. Obrigado..node_modules
pasta pesquisável, mas para importar módulos usandorequire()
, eles ainda devem estar instalados no diretório local do projeto (ou, alternativamente, vinculados usandonpm link
). Módulos globais não podem ser importados em projetos, apenas binários / scripts podem ser executados a partir daí.Você pode usar o link npm para criar um link simbólico para o seu pacote global na sua pasta de projetos.
Exemplo:
Tudo o que faz é criar uma pasta node_modules local e, em seguida, criar um link simbólico expresso -> [diretório global] / node_modules / express que pode ser resolvido por
require('express')
fonte
Instale qualquer pacote globalmente como abaixo:
Como esse módulo de substituição é instalado globalmente, se você vir a pasta de módulos do nó, não verá o módulo de substituição lá e, portanto, não poderá usar este pacote usando require ('replace').
porque with require, você pode usar apenas módulos locais que estão presentes na pasta do módulo do nó.
Agora, para usar o módulo global, você deve vinculá-lo ao caminho do módulo do nó usando o comando abaixo.
Agora volte e veja a pasta do módulo do nó, agora você pode ver o módulo de substituição lá e pode usá-lo com require ('replace') em seu aplicativo, pois está vinculado ao seu módulo de nó local.
Por favor, informe-me se for necessário algum esclarecimento adicional.
fonte
Você pode usar require com o caminho para o diretório global do módulo como argumento.
No meu mac, eu uso isso:
Como descobrir onde estão seus módulos globais? -> Onde o npm instala pacotes?
fonte
Configurando a variável de ambiente NODE_PATH para apontar para sua
node_modules
pasta global .No Windows 7 ou superior, o caminho é semelhante
%AppData%\npm\node_modules
ao do UNIX,/home/sg/.npm_global/lib/node_modules/
mas depende da configuração do usuário.O comando
npm config get prefix
pode ajudar a descobrir qual é o caminho correto.Nos sistemas UNIX, você pode realizá-lo com o seguinte comando:
fonte
Estou usando o Docker. Estou tentando criar uma imagem de janela de encaixe que tenha todas as dependências do meu nó instaladas, mas que possa usar meu diretório de aplicativos local no tempo de execução do contêiner (sem poluí-la com um diretório ou link node_modules). Isso causa problemas nesse cenário. Minha solução alternativa é exigir do caminho exato onde o módulo, por exemplo, require ('/ usr / local / lib / node_modules / socket.io')
fonte
require.paths
está obsoleto.Vá para a pasta do seu projeto e digite
que deve instalá-lo na pasta local ./node_modules onde o nó irá procurá-lo.
Eu mantenho minhas coisas assim:
Crie um arquivo app.js
agora execute meu aplicativo
Verifique se você está usando
npm >= 1.0
enode >= 4.0
.fonte