NPM 전역 설치“모듈을 찾을 수 없음”


206

얼마 전에 npm에 게시 한 모듈을 작성했습니다 (https://npmjs.org/package/wisp)

따라서 명령 줄에서 올바르게 설치됩니다.

$ npm i -g wisp

그러나 명령 줄에서 실행할 때 낙관론이 설치되지 않았다는 오류가 계속 발생합니다.

$ wisp 
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:12:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/wisp/wisp:96:4)
    at Module._compile (module.js:449:26)
    at Object.exports.run (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/coffee-script.js:68:25)
    at compileScript (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:135:29)
    at fs.stat.notSources.(anonymous function) (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/command.js:110:18)

그러나 package.json에서 종속성으로 지정했습니다.

{
  "name": "wisp",
  "author": "Brendan Scarvell <bscarvell@gmail.com>",
  "version": "0.1.0",
  "description": "Global nodejs file server",
  "dependencies": {
    "optimist": "~0.3.4"
  },
  "repository": "git://github.com/tehlulz/wisp",
  "bin": {
    "wisp" : "./wisp"
  }
}

누구든지 이것을 실행하기 위해 무엇을해야하는지 알고 있습니까? bin에 실행 파일을 추가하는 bin 부분과 관련이 있으며 해당 디렉토리의 node_modules가 비어 있습니다. 이 문제를 해결하는 방법을 모릅니다.


-g 옵션없이 설치하면 어떻게됩니까?
vinayr

내부 디렉토리가있는 현재 디렉토리에 node_modules 폴더를 설치합니다.
Menztrual

알아. 여전히 오류가 발생합니까?
vinayr

네. 로컬 npm i wisp를 수행 한 후 wisp를 실행하려고하면 여전히 동일한 오류가 발생합니다.
Menztrual

방금 모듈을 설치했습니다. 그것은 나를 위해 잘 작동합니다. 당신의 위습은 어디에 있습니까? 제 경우에는 제대로 ./node_modules/wisp/wisp작동했습니다.
vinayr

답변:


370

다른 사람 이이 문제가 발생하면 내 npm위치가 아닌 위치에 설치 했기 때문에이 문제가 발생했습니다 NODE_PATH.

[root@uberneek ~]# which npm
/opt/bin/npm
[root@uberneek ~]# which node
/opt/bin/node
[root@uberneek ~]# echo $NODE_PATH

내 NODE_PATH가 비어 있었고 실행 npm install --global --verbose promised-io중으로 설치 중임을 보여주었습니다 /opt/lib/node_modules/promised-io.

[root@uberneek ~]# npm install --global --verbose promised-io
npm info it worked if it ends with ok
npm verb cli [ '/opt/bin/node',
npm verb cli   '/opt/bin/npm',
npm verb cli   'install',
npm verb cli   '--global',
npm verb cli   '--verbose',
npm verb cli   'promised-io' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
[cut]
npm info build /opt/lib/node_modules/promised-io
npm verb from cache /opt/lib/node_modules/promised-io/package.json
npm verb linkStuff [ true, '/opt/lib/node_modules', true, '/opt/lib/node_modules' ]
[cut]

내 스크립트가 실패합니다 require('promised-io/promise'):

[neek@uberneek project]$ node buildscripts/stringsmerge.js 

module.js:340
    throw err;
          ^
Error: Cannot find module 'promised-io/promise'
    at Function.Module._resolveFilename (module.js:338:15)

아마를 사용하여 소스에서 node 및 npm을 설치했을 것입니다 configure --prefix=/opt. 이것이 왜 설치된 모듈을 찾을 수 없는지 모르겠습니다. 지금 수정은 올바른 디렉토리에서 NODE_PATH를 가리 키도록하는 것입니다.

export NODE_PATH=/opt/lib/node_modules

나의 require('promised-io/promise')성공


10
이 NODE_PATH를 어디에 설정할 것인가 ??
모래

8
NODE_PATH 환경 변수를 설정하는 @sandy는 운영 체제에 따라 다릅니다. 나는 풍미있는 Linux를 사용하고 있으므로 export NODE_PATH=...로컬 쉘에서 해당 쉘에서 실행되는 명령으로 내보내 지도록 설정했습니다. 변경 사항을 영구적이거나 모든 셸에서 사용할 수있게하려면 .profile 또는 이와 유사한 곳에 넣습니다. 전체적으로이 개념은 초보자에게는 매우 복잡합니다 . help.ubuntu.com/community/EnvironmentVariables를 읽으 십시오 . Windows의 경우 Linux로 전환하려고합니다. 좋아, 농담이야 computerhope.com/issues/ch000549.htm을 사용해 보거나 Google에 연결하십시오.
Neek

13
OSX Lion의 경우 다음이 나를 위해 일했습니다 ... export NODE_PATH = / usr / local / lib / node_modules 'locate node_modules'를 사용하여 올바른 경로를 추적했습니다.
k1eran

2
NODE_PATH는 WINDOWS에서도 작동합니다. 이것은 노드 모듈에 기반을두고 있으며 로컬 및 전체적으로 설치할 수 있습니다.

5
Mac OS X에서 Homebrew와 함께 Node.js를 설치 한 경우 : open -a TextEdit ~/.bash_profile터미널에서 실행 을 누른 다음 export NODE_PATH=/usr/local/lib/node_modules파일 끝에 추가 하십시오. 터미널 창을 다시 시작하십시오. 이제 running echo $NODE_PATH이 인쇄됩니다 /usr/local/lib/node_modules.
Pwdr

39

prog (mac)의 시작 부분에 이것을 추가하십시오 :

module.paths.push('/usr/local/lib/node_modules');


4
OS 이외의 방법으로 그렇게하는 방법이 있습니까?
UpTheCreek

@UpTheCreek이 이 아닌 운영 체제의 특정 방법. JS 코드이므로 원하는 모듈이있는 node_modules를 가리켜 야합니다
Adelin

@Adelin-전역 node_modules의 위치가 OS마다 다르기 때문에 OS 별 솔루션입니다. 예를 들어, Windows에서 개발하고 프로덕션 환경에서 Linux를 실행하는 경우 이는 훌륭한 솔루션이 아닙니다.
UpTheCreek

쉽게 극복 할 수 있습니다. 예를 들어, 노드 경로를 env 변수에 저장하고 하드 코드 된 경로를 os.environ.nodepath(이 행을 따라) 대체 할 수 있습니다.
Adelin

macOS Mojave 10.14.6에서는 ~ .bash_profile에 NODE_PATH = / usr / local / lib / node_modules / npm / node_modules 내보내기를 추가해야합니다. 이는 네이티브 .js 코드가 영향을받지 않는다는 점에서 머신 독립적입니다.
vwvan

16

기본적으로 노드는 전역 모듈을로드하기 위해 / usr / local / lib / node_module 내부를 찾지 않습니다. http://nodejs.org/api/modules.html#modules_loading_from_the_global_folders에 설명 된 모듈 로딩을 참조하십시오.

따라서 1) / usr / local / lib / node_module을 NODE_PATH에 추가하고 내보내거나 2) 설치된 노드 모듈을 / usr / local / lib / node에 복사해야합니다. (로드 모듈 노드 링크에 설명 된 것처럼이 경로를 검색하고 작동합니다)


10

아무것도 효과가없는 일부 (나 같은)의 경우 다음을 시도하십시오.

brew cleanup
brew link node
brew uninstall node
brew install node

그것이 누군가를 돕기를 바랍니다 :)


9

다음 일반 수정 사항은 모든 모듈에 적용됩니다. 예를 들어 request-promise.

바꾸다

npm install request-promise --global

npm install request-promise --cli

일 ( 소스 에 대한도)과 globalsinherits

또한 환경 변수를 설정하십시오.

NODE_PATH=%AppData%\npm\node_modules


3

$ vim /etc/profile.d/nodejs.sh

NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
export NODE_PATH="$NODE_PATH"

그것은 기본적으로 있습니다. 사용자의 경우로드되지만 루트로 실행되는 동안 루트가 아니므로 루트 사용자의 경로에 포함되어야합니다.
Stamster

2

Windows의 경우 Nodejs의 Windows에서 설치된 모듈을 찾을 수 없습니까? 나를 위해 일한 것은 다음과 같이 npm 링크를 실행 중입니다.

npm link wisp

그러나 한마디-나는 이것을했지만 AWS 람다와 함께 압축 된 코드를 사용할 수는 없었습니다. node_module을 npm install wisp --save(-g 옵션없이) 로컬에서 만들어야했습니다
PM

2

Mac 사용자의 경우 수동 설치를 사용하는 것이 가장 좋습니다.

권한 오류 가능성을 최소화하기 위해 다른 디렉토리를 사용하도록 npm을 구성 할 수 있습니다. 이 예에서는 홈 폴더의 숨겨진 디렉토리가됩니다.

  1. 시작하기 전에 컴퓨터를 백업하십시오.

  2. 글로벌 설치 디렉토리를 작성하십시오.

    mkdir ~ / .npm-global

  3. 새 디렉토리 경로를 사용하도록 npm을 구성하십시오.

    npm 구성 세트 접두사 '~ / .npm-global'

  4. ~ / .profile 파일을 열거 나 작성하고 다음 행을 추가하십시오.

    내보내기 PATH = ~ / .npm-global / bin : $ PATH

  5. 명령 행으로 돌아가서 시스템 변수를 업데이트하십시오.

    소스 ~ / .profile

  6. 테스트 : sudo를 사용하지 않고 패키지를 전체적으로 다운로드하십시오.

    npm install -g jshint

2-4 단계 대신 해당 ENV 변수를 사용할 수 있습니다 (예 : ~ / .profile을 수정하지 않으려는 경우).

NPM_CONFIG_PREFIX=~/.npm-global

참조 : https://docs.npmjs.com/getting-started/fixing-npm-permissions


1

에서 실행 Ubuntu되는 테스트 서버 중 하나에서 동일한 문제가 발생했습니다 root. 그런 다음 사용하여 새로운 사용자 생성 useradd -m myuser설치된 모든 ( nvm, node등, 패키지) myuser. 이제 잘 작동합니다.


1

Windows에서 방금 새로 설치 한 경우 \ AppData \ Roaming에서 npm 캐시를 날려야합니다.


1

모두 내 경우 nodenpm동일한 경로에 있었다 ( /usr/bin). 는 NODE_PATH(가), 그래서 비어 npm에 글로벌 모듈 배치 /usr/lib/node_modules위치를 require(...)성공적으로 찾을 수 있습니다. npmnodejs 패키지와 함께 제공된 모듈 만 예외 입니다. 64 비트 시스템을 사용하고 있기 때문에에 배치되었습니다 /usr/lib64/node_modules. 비어 NODE_PATH있고 노드가에서 시작된 경우 require (...) 검색이 수행되지 않습니다 /usr/bin. 그래서 두 가지 옵션이 있습니다.

  • 링크 /usr/lib64/node_modules/npm/usr/lib/node_modules/npm
  • 모듈로 이동 /usr/lib/node_modules/*하는 /usr/lib64/node_modules/후 SetNODE_PATH=/usr/lib64/node_modules

둘 다 일했다. 업데이트 저장소에서 OpenSUSE 42.1과 nodejs 패키지를 사용하고 있습니다. 버전은 4.4.5입니다.


1

나는 간단한 방법으로 이것을했다 ...

  1. 제어판에서 노드 설치 제거 [Windows 7]
  2. 노드를 다시 설치하십시오
  3. 각도기 npm install --global --verbose protractor
    업데이트 웹 드라이버 관리자를 설치하십시오 .

나를 위해 잘 작동합니다.

이것이 도움이되기를 바랍니다 ....


1

Error: Cannot find module 'number-is-nan'모듈이 실제로 존재하는 동안 이 오류가 발생했습니다 . 잘못되었거나 불완전한 Node.js 설치 때문입니다.

Windows의 경우 다른 답변에서 알 수 있듯이 깨끗한 노드 설치 가 필요 합니다 .

  • Node.js 제거
  • 두 폴더 삭제 npmnpm_cache의를C:\Users\user\AppData\Roaming
  • Windows를 다시 시작하고 Node.js를 설치하십시오.
  • 실행 npm init또는 ( npm init --yes에 대한 기본 설정 )
  • 에 대한 Windows 환경 변수를 설정하십시오 NODE_PATH. 이 경로는 패키지가 설치된 위치입니다. 아마 같은NODE_PATH = C:\Users\user\node_modules or C:\Users\user\AppData\Roaming\npm\node_modules
  • 새로운 cmd 콘솔을 시작하면 npm정상적으로 작동합니다

노트 :

Node.js를 다시 설치하기 전에 마지막 단계를 시도하면 시간을 절약하고 모든 패키지를 다시 설치하지 않아도됩니다.


1

방금 axios모듈 의이 문제를 만났습니다 . 그런 다음 이것을 시도했습니다 : run rm -rf node_modulesyarn. 그리고 작동합니다.


0

OP와 동일한 오류가 있었지만 로그를 파헤쳐 서 볼 수있었습니다 sh: node: command not found.

/ usr / bin / node 프로그램 (symlink)은 더 이상와 함께 설치되지 않습니다 apt install nodejs. symlinked /usr/bin/node' tonodejs ,npm install -g @ angular / cli`가 성공하면.

이것을 데비안에 설치하는 올바른 방법은 apt install nodejs-legacy입니다.


0

env 변수에 C : \ Users \ {Username} \ AppData \ Roaming \ npm을 추가 한 다음 설치할 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.