2013-07-09 29 views
9

Dường như không tìm thấy bất kỳ bài viết nào về điều này ở bất kỳ đâu. Tôi về cơ bản muốn bắt lỗi "Không thể tìm thấy mô-đun" từ bên trong chương trình, và tùy chọn yêu cầu cài đặt nó, nhưng tôi dường như không thể nắm bắt bất kỳ lỗi nào ngay cả khi thử/nắm bắt các câu lệnh yêu cầu của tôi. Điều này thậm chí có thể? Tôi đã không nhìn thấy nó được thực hiện bất cứ nơi nào.Bắt lỗi khi yêu cầu mô-đun trong node.js

Ví dụ:

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 
} 

Tôi cho rằng điều này có thể được thực hiện với một file .js khởi động riêng biệt mà không cần bất kỳ bên thứ 3 yêu cầu, và chỉ đơn giản là sử dụng fs để kiểm tra node_modules, và sau đó tùy chọn chạy npm install từ tiến trình con , sau đó chạy node app với một đứa trẻ khác. Nhưng có vẻ như sẽ dễ dàng hơn để thực hiện việc này từ bên trong một tệp app.js duy nhất

+1

'require' chính nó cho thấy rằng điều này mô-đun là điều cần thiết để ứng dụng chạy. 'Không thể tìm thấy mô-đun' là một thông báo lỗi tự giải thích nếu bạn hỏi tôi. Là nhà phát triển, bạn có trách nhiệm bao gồm tất cả các phụ thuộc vào gói của mình nếu bạn muốn người khác sử dụng ứng dụng của mình. – Amberlamps

+1

@Amberlamps Thường tốt hơn là không cung cấp phụ thuộc cho ứng dụng như là một phần của gói, nhưng chúng được tải xuống tại thời điểm sử dụng. Vì vậy, không phải để cung cấp các mô-đun cũ/lỗi thời, và không để lãng phí không gian. Đó là mục đích của 'package.json' và' npm install'. Tìm kiếm của tôi cho giải pháp này là vì mục đích làm cho ứng dụng của tôi trở nên thân thiện và tự động nhất có thể. – krb686

Trả lời

6

Điều đó phù hợp với tôi khi bạn có. Bạn có chắc chắn không có thư mục node_modules/express nào đó ở trên bạn trong hệ thống tệp yêu cầu là tìm kiếm không? Hãy thử làm điều này để được rõ ràng về những gì đang xảy ra:

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

Tôi không biết làm thế nào tôi messed rằng lên, nhưng tôi đã xóa các node_modules thư mục và nó có vẻ là làm việc tốt ngay bây giờ. Cảm ơn. Tôi sẽ chấp nhận câu trả lời của bạn vì đã nhắc tôi thử lại và sửa nó. – krb686

16

Để làm cho nó đúng, hãy chắc chắn để bắt chỉ Mô-đun không tìm thấy lỗi cho module đưa ra:

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; 
    } 

} 
Các vấn đề liên quan