Движок V8 и Node.js
От: DenProg  
Дата: 27.10.19 07:09
Оценка:
Есть 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. Кто-то может сказать как подобное можно сделать?
Re: Движок V8 и Node.js
От: DenProg  
Дата: 27.10.19 07:57
Оценка:
Видимо Electron.js построен на основе Node.js с патчами для возможностей GUI вывода.
Re: Движок V8 и Node.js
От: PM  
Дата: 27.10.19 12:03
Оценка: +1
Здравствуйте, 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, но добавит дополнительных наклонных расходов на межпроцессное взаимодействие.
Re[2]: Движок V8 и Node.js
От: DenProg  
Дата: 29.10.19 18:01
Оценка:
PM>3. Может быть возможно написать Node addon для взаимодействия Node со своим продуктом.

PM>Третий вариант позволит не привязываться к конкретной версии Node, но добавит дополнительных наклонных расходов на межпроцессное взаимодействие.


А как предлагаете использовать 3 вариант? Node.js будет крутиться параллельно обертке V8? Если в обертке исполняется обычный скрипт, то он исполняется там, а если Node.js скрипт, то что? Не понятно.
Re[3]: Движок V8 и Node.js
От: PM  
Дата: 29.10.19 19:19
Оценка:
Здравствуйте, 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!');
});
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.