[node.js] 노드에서 전역 모듈을 가져 오려면 어떻게합니까? “오류 : <module> 모듈을 찾을 수 없습니다”라는 메시지가 나타 납니까?

Mac OSX Lion에서 노드를 설정하려고합니다. 모두 제대로 작동하는 것 같지만 전역 모듈 폴더에서 모듈을 가져올 수 없습니다. 오류가 발생합니다.

Error: Cannot find module <module>

내가 이것을 실행하면 : node -e require.paths내가 얻는 응답은 다음과 같습니다.

[ '/usr/local/lib/node_modules',
  '/Users/Me/.node_modules',
  '/Users/Me/.node_libraries',
  '/usr/local/Cellar/node/0.4.12/lib/node' ]

맞습니다. 제 모듈은 / usr / local / lib / node_modules에 실제로 설치되어 있습니다. 그러나 스크립트를 실행하려고하면 다음과 같은 결과가 나타납니다.

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)

내 .bash_profile은 다음과 같습니다.

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/"

도움을 주셔서 감사합니다. 왜 라이브러리를 가져올 수 없는지 모르겠습니다.



답변

npm> = 1.0 npm link <global-package>을 사용하는 경우 이미 전역에 설치된 패키지에 대한 로컬 링크를 만드는 데 사용할 수 있습니다 . ( 주의 사항 : OS는 심볼릭 링크를 지원해야합니다. )

그러나 이것은 문제가없는 것은 아닙니다.

npm 링크는 개발 도구입니다. 그것은이다 멋진 지역 개발 상자에서 패키지를 관리. 그러나 npm 링크를 사용하여 배포하면 기본적으로 문제가 발생합니다. 실현하지 않고도 업데이트하기가 매우 쉽기 때문입니다.

대안으로 패키지를 로컬뿐만 아니라 전역으로 설치할 수 있습니다.

추가 정보는 다음을 참조하십시오.


답변

Node.js는 환경 변수 NODE_PATH를 사용하여 모듈 검색 경로에 포함 할 추가 디렉토리를 지정할 수 있습니다. npm자체적으로 npm root -g명령을 사용하여 전역 모듈이 저장된 위치를 알 수 있습니다 . 따라서이 두 가지를 결합하면 다음 명령을 사용하여 전역 모듈이 검색 경로에 포함되도록 할 수 있습니다 (Linux의 경우).

export NODE_PATH=$(npm root --quiet -g)


답변

npm 링크를 사용하여 프로젝트 폴더에서 전역 패키지에 대한 심볼릭 링크를 만들 수 있습니다.

예:

$ npm install -g express
$ cd [local path]/project
$ npm link express

로컬 node_modules 폴더를 만든 다음 symlink express-> [global directory] / node_modules / express를 만들어서 해결할 수 있습니다. require('express')


답변

아래와 같이 패키지를 전체적으로 설치하십시오.

$ npm install -g replace  // replace is one of the node module.

이 교체 모듈이 전체적으로 설치되므로 노드 모듈 폴더가 표시되면 교체 모듈이 표시되지 않으므로 require ( ‘replace’)를 사용하여이 패키지를 사용할 수 없습니다.

요구 사항이 있으면 노드 모듈 폴더에있는 로컬 모듈 만 사용할 수 있기 때문입니다.

이제 전역 모듈을 사용하려면 아래 명령을 사용하여 노드 모듈 경로와 연결해야합니다.

$ npm link replace

이제 돌아가서 노드 모듈 폴더를 확인하십시오. 이제 모듈 교체를 볼 수 있으며 로컬 노드 모듈과 연결되어 있으므로 응용 프로그램에서 require ( ‘replace’)와 함께 사용할 수 있습니다.

더 자세한 설명이 필요하면 Pls에 알려주십시오.


답변

글로벌 모듈 디렉토리의 경로와 함께 require를 인수로 사용할 수 있습니다.

require('/path/to/global/node_modules/the_module');

내 Mac에서는 다음을 사용합니다.

require('/usr/local/lib/node_modules/the_module');

글로벌 모듈의 위치를 ​​찾는 방법은 무엇입니까? -> npm은 패키지를 어디에 설치합니까?


답변

환경 변수 NODE_PATH을 설정하면 지구를 가리 키도록 node_modules폴더에 있습니다.

Windows 7 이상에서는 경로가 %AppData%\npm\node_modules비슷 /home/sg/.npm_global/lib/node_modules/하지만 UNIX 에서는 경로가 비슷 하지만 사용자 구성에 따라 다릅니다.

이 명령 npm config get prefix은 올바른 경로를 찾는 데 도움 이 될 수 있습니다.

UNIX 시스템에서는 다음 명령을 사용하여이를 수행 할 수 있습니다.

export NODE_PATH=`npm config get prefix`/lib/node_modules/


답변

Docker를 사용하고 있습니다. 모든 노드 종속성이 설치된 도커 이미지를 만들려고하지만 컨테이너 런타임에 (node_modules 디렉토리 또는 링크로 오염시키지 않고) 로컬 앱 디렉토리를 사용할 수 있습니다. 이 시나리오에서 문제가 발생합니다. 내 해결 방법은 모듈이있는 정확한 경로에서 요구하는 것입니다. 예 : require ( ‘/ usr / local / lib / node_modules / socket.io’)