2017-11-30 15 views
1

에 대한 노드 모듈 해상도를 나누기 /로 myscripf은 다음과 같습니다도우 내가</p> <pre><code>/mymodule --/bin --/myscript --/package.json . . . </code></pre> <p>빈과 같은 구조의 노드 프로젝트가 상대 경로

#!/usr/bin/env node 

const mymodule = require('..').mymodule; 

것은 내가 일반 사용자 모두로 스크립트를 실행하면 잘 작동합니다. sudo를 사용하여 스크립트를 실행하려고하면 오류로 모듈 해상도가 깨집니다.

module.js:471 
    throw err; 
    ^

Error: Cannot find module '../' 
    at Function.Module._resolveFilename (module.js:469:15) 
    at Function.Module._load (module.js:417:25) 
    at Module.require (module.js:497:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/mymodule/bin/myscript) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 

sudo로 실행할 때 모듈 확인이 실패하는 이유는 무엇입니까?

+0

무엇 명령은 쉘에서 스크립트를 실행하기 위해 실행하고 있습니까? 거기에 홈 상대 경로를 사용하면 ~을 사용하면 문제가 발생할 수 있습니다. – elem4th

+0

프로젝트 디렉토리에서 bin/myscript를 실행 중입니다. 발사와 관련된 가정 경로가 없습니다. – user3076144

답변

1

모듈 로딩과 관련된 문제가 아니라 기본적으로 npm이 사전/사후 설치 스크립트를 실행할 때 자체 권한을 강등한다는 사실이 밝혀졌습니다. 결과적으로 설치 후 스크립트가 빌드 디렉토리를 작성하지 않았기 때문에 실제로 모듈이 누락되었습니다. 내가 NPM과 --unsafe-perm 플래그를 사용하여이 문제를 해결 할 수 있었다, 그래서 sudo를 실행하지

npm WARN lifecycle <my module>@<my version>~postinstall: cannot run in wd 

이 옵션이 아니었다 : 프로젝트를 설치할 때 나는 분출에 경고를 놓친

$ npm install --unsafe-perm