Как мога да използвам javascript библиотека от страната на сървъра на приложение NodeJS, когато то е проектирано да работи на клиента?

Гмуркам се в NodeJS и Express (това е много сложно за мен), за да създам уеб приложение в реално време. В момента се опитвам да разбера как мога да използвам съществуваща javascript библиотека от страната на сървъра. Проблемът е, че библиотеката изглежда е проектирана да работи от страна на клиента и в резултат на това инструкциите ви показват само как да я използвате от страна на клиента. Библиотеката, за която говоря, можете да намерите тук...

https://github.com/replit/jsrepl

Въпроси:

  1. Тъй като уеб приложението на NodeJS е изградено на javascript, справедливо ли е да се каже, че мога да стартирам всяка библиотека на javascript без gui от страната на сървъра?
  2. Може ли някой да предложи някакви насоки как мога да добавя тази библиотека jsrepl към моето приложение Express 3.0 по начин, който ми позволява да го използвам по същия начин, по който бих го използвал от страната на клиента в браузър? Трябва ли да променя кода на jsrepl и да добавя "exports." към методите, които искам да използвам?

Което означава, че от страната на сървъра мога да изпълня следния код...

var jsrepl = new JSREPL({  
  input: inputCallback,  
  output: outputCallback,  
  result: resultCallback,  
  error: errorCallback,  
  progress: progressCallback,  
  timeout: {  
    time: 30000,  
    callback: timeoutCallback  
  }  
});  

Благодаря предварително за цялата ви мъдрост! Правя всичко възможно да разбера всичко това.


person BeachRunnerFred    schedule 11.05.2013    source източник
comment
+1 въпрос. Интересна библиотека - чист javascript python, схема и lua интерпретатор. Тази библиотека просто крещи да бъде пренесена към node.js   -  person slebetman    schedule 25.10.2013


Отговори (3)


Така че това е възможно, но имате нужда от сериозно хакерство, за да го накарате да работи. Тъй като това не е модул на възел и се пише от браузъра, както други отбелязаха, имате нужда от DOM в рамките на възел, за да го изпълните. За щастие имаме прекрасния проект jsdom, който ни позволява да правим точно това. Така че нека да настроим това нещо.

  • cd във вашия проект за възел (създайте такъв, ако вече няма такъв)
  • клониране на jsrepl repo git clone git://github.com/replit/jsrepl.git
  • cd в jsrepl и инициализиране на подмодули git submodule update --init --recursive
  • все още в папката, стартирайте npm install coffee-script и npm install uglify-js, зависимости, които не са споменати никъде в репо (уф).
  • уверете се, че java е инсталирана и стартирайте cake bake. След дълъг процес на компилиране на java файлове и така командата ще приключи и jsrepl ще бъде изграден и готов за работа.
  • стартирайте npm install jsdom, тогава можем да започнем да пишем примерен файл

Ето минимален пример:

var jsdom = require('jsdom'),
    fs = require('fs'),
    jsrepl = fs.readFileSync('./jsrepl/repl.js', 'utf8');

jsdom.env({
  html: "<script src='jsrepl.js' id='jsrepl-script'></script> ",
  src: [jsrepl],
  done: function(err, window){
    if (err) return console.error(err);
    run_jsrepl.call(window);
  }
});

function run_jsrepl(){
  console.log(this.JSREPL)
}

Ето минималното количество код, необходим, за да получите JSREPL на място, където работи. Всичко, което правим тук, е да изискваме jsdom и да го инстанцираме, четейки източника на jsrepl направо от файла. Ако стартирате този файл с node filename, той ще излезе от вашия JSREPL обект, който може да се използва точно както е в браузъра :)

person Jeff Escalante    schedule 25.10.2013

Можете да стартирате phantomjs в Node, който е уебкит браузър без глава. След това стартирайте jsrepl вътре в phantomjs.

person Dan Kohn    schedule 22.10.2013

  1. Не. Има неща от страната на клиента, които нямате от страна на сървъра (и обратното): например DOM.
  2. Самият аз никога не съм работил с jsrepl, но ако приемем, че не зависи от платформата, require()даването му от възлов модул трябва да е ОК. Въпреки това изглежда има някои специфични за DOM неща във въпросните скриптове (напр. document.getElementById), които предполагат друго.
person ubik    schedule 11.05.2013
comment
е вярно. jsrepl няма да работи в среда на възел, както е написано в момента. Може би това може да помогне, nodejs.org/api/repl.html. - person Thaddeus Albers; 10.06.2013
comment
@ThaddeusAlbers: jsrepl също може директно да изпълнява coffeescript, схема, lua и python, така че не е просто обикновен REPL цикъл като този в ядрото на възела. - person slebetman; 25.10.2013