第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

將“ Vanilla” Javascript庫加載到Node.js中

將“ Vanilla” Javascript庫加載到Node.js中

MYYA 2019-11-22 15:59:53
我希望在Node.js服務(wù)器中使用某些具有某些功能的第三方Javascript庫。(特別是我想使用找到的QuadTree javascript庫。)但是這些庫只是簡單的.js文件,而不是“ Node.js庫”。因此,這些庫未遵循exports.var_nameNode.js對(duì)其模塊期望的語法。據(jù)我了解,這意味著當(dāng)您這樣做時(shí),module = require('module_name');或者module = require('./path/to/file.js');最終將得到一個(gè)沒有公共可訪問功能的模塊,等等。然后我的問題是“如何將一個(gè)任意的javascript文件加載到Node.js中,這樣我就可以利用其功能而不必重寫它來做到這一點(diǎn)exports?”我對(duì)Node.js還是很陌生,所以請(qǐng)讓我知道我對(duì)它的工作方式是否有明顯的了解。編輯:進(jìn)行了更多的研究,現(xiàn)在我看到Node.js使用的模塊加載模式實(shí)際上是最近開發(fā)的用于加載稱為CommonJS的 Javascript庫的標(biāo)準(zhǔn)的一部分。它在Node.js的模塊文檔頁面上說的是正確的,但直到現(xiàn)在我都沒想到。最終,我的問題的答案可能是“等到您的庫的作者開始編寫CommonJS接口或做該死的自我時(shí),”。javascript node.js 
查看完整描述

3 回答

?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

有比使用eval:vm模塊更好的方法。


例如,這是我的execfile模塊,該模塊path在context或全局上下文中評(píng)估腳本:


var vm = require("vm");

var fs = require("fs");

module.exports = function(path, context) {

  context = context || {};

  var data = fs.readFileSync(path);

  vm.runInNewContext(data, context, path);

  return context;

}

可以這樣使用:


> var execfile = require("execfile");

> // `someGlobal` will be a global variable while the script runs

> var context = execfile("example.js", { someGlobal: 42 });

> // And `getSomeGlobal` defined in the script is available on `context`:

> context.getSomeGlobal()

42

> context.someGlobal = 16

> context.getSomeGlobal()

16

其中example.js包含:


function getSomeGlobal() {

    return someGlobal;

}

該方法的最大優(yōu)點(diǎn)是您可以完全控制已執(zhí)行腳本中的全局變量:您可以傳入自定義全局變量(通過context),并且腳本創(chuàng)建的所有全局變量都將添加到中context。調(diào)試也更加容易,因?yàn)閷⑹褂谜_的文件名報(bào)告語法錯(cuò)誤等。


查看完整回答
反對(duì) 回復(fù) 2019-11-22
?
狐的傳說

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

對(duì)于這種情況,我認(rèn)為這是“最正確的”答案。


假設(shè)您有一個(gè)名為的腳本文件quadtree.js。


您應(yīng)該構(gòu)建node_module具有這種目錄結(jié)構(gòu)的自定義...


./node_modules/quadtree/quadtree-lib/

./node_modules/quadtree/quadtree-lib/quadtree.js

./node_modules/quadtree/quadtree-lib/README

./node_modules/quadtree/quadtree-lib/some-other-crap.js

./node_modules/quadtree/index.js

./node_modules/quadtree/quadtree-lib/目錄中的所有內(nèi)容都是來自第3方庫的文件。


然后,您的./node_modules/quadtree/index.js文件將只從文件系統(tǒng)中加載該庫,并完成正確導(dǎo)出內(nèi)容的工作。


var fs = require('fs');


// Read and eval library

filedata = fs.readFileSync('./node_modules/quadtree/quadtree-lib/quadtree.js','utf8');

eval(filedata);


/* The quadtree.js file defines a class 'QuadTree' which is all we want to export */


exports.QuadTree = QuadTree

現(xiàn)在,您可以quadtree像其他任何節(jié)點(diǎn)模塊一樣使用模塊了。


var qt = require('quadtree');

qt.QuadTree();

我喜歡這種方法,因?yàn)椴恍枰哪牡?方庫的任何源代碼,因此維護(hù)起來更容易。升級(jí)所需要做的只是查看其源代碼,并確保您仍在導(dǎo)出適當(dāng)?shù)膶?duì)象。


查看完整回答
反對(duì) 回復(fù) 2019-11-22
  • 3 回答
  • 0 關(guān)注
  • 668 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)