2015-02-01 5 views
7

Единственный способ, с помощью которого я могу сделать вывод о том, работает ли node.js или io.js, является проверка process.versions.node. В io.js я получаю 1.0.4.Есть ли надежный способ обнаружения работы io.js или node.js?

Я уверен, что есть лучший способ - кто-нибудь знает?

+0

Я только что нашел этот вопрос, но несколько дней назад я спросил что-то подобное, но [обнаружил между nodejs, iojs, jxcore и Microsoft fork узла с движком jc ChakraCore] (http://stackoverflow.com/ вопросы/35037072). – hippietrail

ответ

3

Теперь самое надежное решение для exec node -h и посмотреть, содержит ли оно iojs.org подстроку. Если он делает - это iojs:

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

Большой минус такого подхода - это асинхронный. Поэтому я написал небольшую библиотеку, которая упрощает работу: is-iojs.

Но, честно говоря, кто знает, когда будет выпущена версия узла 1, возможно, никогда. Так что я думаю, что для определения теперь только на основании process.version достаточно:

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

Также вы можете проверить process.execPath строки, но этот подход не работает для окон, насколько я знаю.

+0

Первое решение не сработает, если 'node' не указывает на текущий исполняемый файл (т. Е. Два iojs и узел устанавливаются рядом друг с другом ...) –

+1

@FaridNouriNeshat. Теперь' node' и 'iojs' не могут быть установлены. . Также описанную вами проблему можно исправить с помощью 'process.execPath'. Поэтому я обновил ответ. Спасибо за замечание. – alexpods

+0

Спасибо, ваш пакет 'is-iojs' работает с удовольствием :-). – khoomeister