노드에서 전역 모듈을 가져 오려면 어떻게합니까? “오류 : 모듈을 찾을 수 없습니다"?
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 링크를 사용하여 배포하면 기본적으로 문제가 발생합니다. 실현하지 않고도 업데이트하기가 매우 쉽기 때문입니다.
대안으로 패키지를 로컬뿐만 아니라 전역으로 설치할 수 있습니다.
추가 정보는 다음을 참조하십시오.
- https://nodejs.org/en/blog/npm/npm-1-0-link/
- https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/
npm 링크를 사용하여 프로젝트 폴더에서 전역 패키지에 대한 심볼릭 링크를 만들 수 있습니다.
예:
$ npm install -g express
$ cd [local path]/project
$ npm link express
로컬 node_modules 폴더를 만든 다음 symlink express-> [global directory] / node_modules / express를 만들어서 해결할 수 있습니다. require('express')
Node.js는 환경 변수 NODE_PATH
를 사용하여 모듈 검색 경로에 포함 할 추가 디렉토리를 지정할 수 있습니다. npm
자체적으로 npm root -g
명령을 사용하여 전역 모듈이 저장된 위치를 알 수 있습니다 . 따라서이 두 가지를 결합하면 다음 명령을 사용하여 전역 모듈이 검색 경로에 포함되도록 할 수 있습니다 (Linux의 경우).
export NODE_PATH=$(npm root --quiet -g)
아래와 같이 패키지를 전체적으로 설치하십시오.
$ npm install -g replace // replace is one of the node module.
이 교체 모듈이 전체적으로 설치되므로 노드 모듈 폴더가 표시되면 교체 모듈이 표시되지 않으므로 require ( 'replace')를 사용하여이 패키지를 사용할 수 없습니다.
요구 사항이 있으면 노드 모듈 폴더에있는 로컬 모듈 만 사용할 수 있기 때문입니다.
이제 전역 모듈을 사용하려면 아래 명령을 사용하여 노드 모듈 경로와 연결해야합니다.
$ npm link replace
Now go back and see your node module folder you could now be able to see replace module there and can use it with require('replace') in your application as it is linked with your local node module.
Pls let me know if any further clarification is needed.
You can use require with the path to the global module directory as an argument.
require('/path/to/global/node_modules/the_module');
On my mac, I use this:
require('/usr/local/lib/node_modules/the_module');
How to find where your global modules are? --> Where does npm install packages?
Setting the environment variable NODE_PATH to point to your global node_modules
folder.
In Windows 7 or higher the path is something like %AppData%\npm\node_modules
while in UNIX could be something like /home/sg/.npm_global/lib/node_modules/
but it depends on user configuration.
The command npm config get prefix
could help finding out which is the correct path.
In UNIX systems you can accomplish it with the following command:
export NODE_PATH=`npm config get prefix`/lib/node_modules/
I am using Docker. I am trying to create a docker image that has all of my node dependencies installed, but can use my local app directory at container run time (without polluting it with a node_modules directory or link). This causes problems in this scenario. My workaround is to require from the exact path where the module, e.g. require('/usr/local/lib/node_modules/socket.io')
require.paths
is deprecated.
Go to your project folder and type
npm install socket.io
that should install it in the local ./node_modules folder where node will look for it.
I keep my things like this:
cd ~/Sites/
mkdir sweetnodeproject
cd sweetnodeproject
npm install socket.io
Create an app.js file
// app.js
var socket = require('socket.io')
now run my app
node app.js
Make sure you're using npm >= 1.0
and node >= 4.0
.
'development' 카테고리의 다른 글
MySQL은 날짜 문자열을 유닉스 타임 스탬프로 변환 (0) | 2020.07.05 |
---|---|
VIM의 실행 취소 트리는 어떻게 사용됩니까? (0) | 2020.07.05 |
R 함수에서 여러 객체 반환하기 (0) | 2020.07.05 |
String # equals와 String # contentEquals 메소드의 차이점 (0) | 2020.07.05 |
jQuery에서 여러 클래스 추가 및 제거 (0) | 2020.07.05 |