2015-02-01 13 views
7

Cách duy nhất tôi có thể loại suy luận xem node.js hoặc io.js có đang chạy hay không là kiểm tra process.versions.node. Trong io.js, tôi nhận được 1.0.4.Có cách nào đáng tin cậy để phát hiện xem io.js hoặc node.js có đang chạy không?

Tôi chắc chắn có cách tốt hơn - có ai biết không?

+0

Tôi vừa tìm thấy câu hỏi này nhưng một vài ngày trước tôi đã hỏi một cái gì đó tương tự nhưng [phát hiện giữa nodejs, ioj, jxcore và nhánh Microsoft của nút bằng công cụ chakraCore js] (http://stackoverflow.com/ câu hỏi/35037072). – hippietrail

Trả lời

3

Bây giờ giải pháp đáng tin cậy nhất là thực hiện node -h và xem liệu nó có chứa chuỗi phụ iojs.org hay không. Nếu có - đó là iojs:

function isIojs(callback) { 
    require('child_process').exec(process.execPath + ' -h', function(err, help) { 
     return err ? callback(err) : callback(null, /iojs\.org/.test(help)); 
    }); 
} 

Trừ lớn cách tiếp cận đó - nó không đồng bộ. Vì vậy, tôi đã viết một thư viện nhỏ đơn giản hóa công việc: is-iojs.

Nhưng nói thẳng thắn: ai biết khi nào phiên bản nút 1 sẽ được phát hành, có thể không bao giờ. Vì vậy, tôi nghĩ bây giờ quyết tâm chỉ dựa trên process.version là đủ:

var isIojs = parseInt(process.version.match(/^v(\d+)\./)[1]) >= 1; 

Ngoài ra bạn có thể kiểm tra process.execPath chuỗi, nhưng phương pháp này không hoạt động cho các cửa sổ như xa như tôi biết.

+0

Giải pháp đầu tiên sẽ thất bại nếu 'nút' không trỏ đến tệp thực thi hiện tại (tức là hai ioj và nút đang được cài đặt cạnh nhau ...) –

+1

@FaridNouriNeshat Hiện tại, không thể cài đặt nút' node' và 'iojs' bên cạnh". Ngoài ra vấn đề bạn mô tả có thể được cố định bằng cách sử dụng 'process.execPath'. Vì vậy, tôi đã cập nhật câu trả lời. Cảm ơn vì đã nhận xét. – alexpods

+0

Cảm ơn, gói 'is-iojs' của bạn hoạt động như sau :-). – khoomeister

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