2013-07-09 3 views
9

어디서나 기사를 찾을 수 없습니다. 나는 기본적으로 프로그램 내에서 "모듈을 찾을 수 없다"오류를 잡아두고 선택적으로 설치를 요청하지만 try/catch를 사용하는 경우에도 오류를 잡을 수는 없습니다. 이것은 가능한가? 나는 그것이 어디서든지 끝내는 것을 보지 못했다. 예를 들어node.js에서 모듈을 요구할 때 오류를 잡으십시오.

:

나는이 어떤 제 3 자가 필요없이 별도의 .js 시작 파일을 수행하고, 단순히 node_modules를 확인하기 위해 fs를 사용하고 선택적으로 자식 프로세스에서 npm install 실행 할 수도있을 것 같군요
try { 
    var express = require('express'); 
} catch (err){ 
    console.log("Express is not installed."); 
    //proceed to ask if they would like to install, or quit. 
    //command to run npm install 
} 

다른 자식과 node app을 실행합니다. 하지만 하나의 app.js 파일에서이 작업을 수행하는 것이 더 쉬운 것 같아요.

+1

'자체가이 제안 require' 모듈은 앱 실행에 필수적입니다. '모듈을 찾을 수 없습니다. '라는 질문은 나에게 묻는다면 자명하다. 개발자가 다른 사람이 앱을 사용하게하려면 패키지에 모든 종속성을 포함시켜야합니다. – Amberlamps

+1

@Amberlamps 일반적으로 패키지의 일부로 앱에 의존성을 제공하지 말고 사용시에 다운로드해야합니다. 따라서 오래되거나 오래된 모듈을 제공하지 말고 공간을 낭비하지 말아야합니다. 이것이'package.json'과'npm install'의 목적입니다. 이 솔루션에 대한 내 사냥은 가능한 한 사용자 친화적이고 자동으로 내 앱을 만들기위한 것입니다. – krb686

답변

6

당신이 가지고있는대로 잘 작동합니다. 파일 시스템에 어딘가에 찾을 수있는 node_modules/express 폴더가 없다고 확신합니까? 무슨 일이 일어나고 있는지에 대해 명확하게하기 위해이 일을보십시오 : 주어진 모듈에 대한

try { 
    var express = require('express'); 
    console.log("Express required with no problems", express); 
} catch (err){ 
    console.log("Express is not installed."); 
    //proceed to ask if they would like to install, or quit. 
    //command to run npm install 
} 
+0

나는 그걸 망쳤다는 것을 모르지만 node_modules 폴더를 지우고 지금은 잘 작동하고있는 것처럼 보입니다. 감사. 다시 시도하고 문제를 해결하라는 대답을 받아 들일 것입니다. – krb686

16

가 잘 있는지 확인하려면에만 모듈을 잡으려고 발견되지 오류 :

try { 
    var express = require('express'); 
} catch (e) { 
    if (e.code !== 'MODULE_NOT_FOUND') { 
     // Re-throw not "Module not found" errors 
     throw e; 
    } 
    if (e.message.indexOf('\'express\'') === -1) { 
     // Re-throw not found errors for other modules 
     throw e; 
    } 

} 
관련 문제