簡體   English   中英

如果設計為在客戶端上運行,我如何在NodeJS應用程序的服務器端使用javascript庫?

[英]How can I use a javascript library on the server side of a NodeJS app when it was designed to run on the client?

我正在深入研究NodeJS和Express(對我來說太復雜了)來構建一個實時的Web應用程序。 目前,我正在嘗試了解如何在服務器端使用現有的JavaScript庫。 問題是庫似乎被設計為在客戶端運行,因此,說明只顯示如何在客戶端使用它。 我正在談論的圖書館可以在這里找到......

https://github.com/replit/jsrepl

問題:

  1. 由於NodeJS Web應用程序是基於javascript構建的,可以說我可以在服務器端運行任何非gui javascript庫嗎?
  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  
  }  
});  

提前感謝您的所有智慧! 我正在盡我所能去理解這一切。

所以這是可能的,但你需要一些嚴肅的hackery來使它工作。 由於這不是一個節點模塊,並且正如其他人所指出的那樣是從瀏覽器中編寫的,因此您需要在節點內使用DOM來執行它。 幸運的是,我們有一個精彩的jsdom項目,它允許我們做到這一點。 所以讓我們設置這個東西吧。

  • cd進入你的節點項目(如果沒有一個,則創建一個)
  • 克隆jsrepl repo git clone git://github.com/replit/jsrepl.git
  • cd到jsrepl並初始化子模塊git submodule update --init --recursive
  • 仍然在文件夾中,運行npm install coffee-scriptnpm install uglify-js ,repo(ugh)中任何地方都沒有提到的依賴項。
  • 確保安裝了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對象,它可以像在瀏覽器中一樣使用JSREPL

您可以在Node中運行phantomjs ,這是一個無頭webkit瀏覽器。 然后在phantomjs中運行jsrepl。

  1. 沒有。客戶端有些東西在服務器端沒有(反之亦然):例如,DOM。
  2. 我自己從未使用jsrepl ,但假設它與平台無關,從節點模塊中require()它應該沒問題。 但是,在相關腳本中似乎存在一些特定於DOM的內容(例如document.getElementById )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM