Есть C++ обертка для V8. Нужно прикрутить возможность в JS скриптах использовать модули Node.js.
Т.е.
var fs = require('fs');
fs.appendFile('mynewfile1.txt', 'Hello content!', function (err) {
if (err) throw err;
console.log('Saved!');
});
Начал смотреть как это сделано в HW.js и electron.js. Они собирают кастомный Node.js и как-то дергают. Но как — не могу разобраться. И собрать не могу, ибо gclient виснет на Still working on:
src. Кто-то может сказать как подобное можно сделать?
Видимо Electron.js построен на основе Node.js с патчами для возможностей GUI вывода.
Здравствуйте, DenProg, Вы писали:
DP>Есть C++ обертка для V8. Нужно прикрутить возможность в JS скриптах использовать модули Node.js.
DP>Т.е.
DP>DP>var fs = require('fs');
DP>fs.appendFile('mynewfile1.txt', 'Hello content!', function (err) {
DP> if (err) throw err;
DP> console.log('Saved!');
DP>});
DP>
DP>Начал смотреть как это сделано в HW.js и electron.js. Они собирают кастомный Node.js и как-то дергают. Но как — не могу разобраться. И собрать не могу, ибо gclient виснет на Still working on:
DP>src. Кто-то может сказать как подобное можно сделать?
Я вижу 3 варианта:
1. Встроить Node в свой продукт:
https://github.com/nodejs/help/issues/818
2. Написать слой эмуляции Node в своем продукте
3. Может быть возможно написать Node addon для взаимодействия Node со своим продуктом.
В первом случае вам придется либо жить с двумя экземплярами V8 — своим и нодовским и заниматься передачей между ними информации; либо поменять свой продукт так, чтобы он использовал V8 из Node.
Во втором случае необходимо фактически реализовать асихронное ядро как в Node, добавить поддержку базовых вещей — файловую систему, сеть, криптографию и т.д. и т.п. То есть тот минимум, который будут использовать другие модули.
Я делал такое, повторять не очень рекомендую:
https://github.com/aspectron/jsx
Третий вариант позволит не привязываться к конкретной версии Node, но добавит дополнительных наклонных расходов на межпроцессное взаимодействие.
Здравствуйте, DenProg, Вы писали:
PM>>3. Может быть возможно написать Node addon для взаимодействия Node со своим продуктом.
PM>>Третий вариант позволит не привязываться к конкретной версии Node, но добавит дополнительных наклонных расходов на межпроцессное взаимодействие.
DP>А как предлагаете использовать 3 вариант? Node.js будет крутиться параллельно обертке V8? Если в обертке исполняется обычный скрипт, то он исполняется там, а если Node.js скрипт, то что? Не понятно.
Делать скрипты для Node.js из которых вызывать вашу обертку:
#!/usr/bin/env node
var fs = require('fs')
var myApp = require('myApp') // сюда выставить API которые доступны сейчас для скриптов внутри программы
var r1 = myApp.callApi({ arg1: 'some args' })
var r2 = myApp.runComplexLogicInCpp(r1);
var result = otherJsCodeThatMayUse3rdPatyNPMs(r2);
fs.appendFile('mynewfile1.txt', result, function (err) {
if (err) throw err;
console.log('Saved!');
});