将外部JavaScript库转换为Node.js模块

11

我发现了一个离散事件仿真库sim.js,并且认为在学习node.js的过程中使用它会很有趣。这是一个单独的JavaScript文件,没有依赖于其他库或浏览器。

将其包含到我的代码库中的最佳实践是什么?将.js文件保存到磁盘上,并将其转换为标准的node模块?

例如:

// ---sim.js
var Sim = function () {
  this.simTime = 0;
  this.entities = [];
}

Sim.Event = function (name) {
  this.name = name;
};
// ... functions continue
module.exports = Sim;

// --- main.js
var Sim = require('./sim');

var sim = new Sim();
var trafficLights = [new Sim.Event("North-South Light"),
                     new Sim.Event("East-West Light")]; 

还有没有更简单的方法可以不需要修改/模块化原始的js代码?


不对,根据你提供的链接:“只有使用JavaScript版本1.7的Mozilla Firefox支持通过yield关键字实现基于进程的编程模型”。 - dandavis
1
SIM.JS库提供基于事件的编程模型,原因如下:...只有Mozilla...支持基于进程的编程。根据我的理解,他们没有使用yield和惯用的JavaScript。经过查看源代码,我没有看到任何使用yield的地方。http://simjs.com/_downloads/sim-0.26-debug.js - Allyl Isocyanate
1个回答

4
所以,如果你只是想让它工作,你可以将它保存到磁盘。看起来 Sim 是为全局浏览器设计的,这意味着它对于 node 模块必须支持的 CommonJS 模式一无所知。因此,你可以像上面那样添加 module.exports = Sim; 代码片段,这基本上就能让你开始运行了。
如果你想让这个项目支持 node/CommonJS,你可以向他们发送一个补丁。许多最初在浏览器中启动的库都不得不添加对 requirejs、commonjs、amd、bower、component 等包管理器的支持。例如,moment 库支持许多不同类型的用途,你可以看到需要许多配置和胶水代码才能使其在如此广泛的场景下运行良好。
我不会过分担心“最佳实践”,因为整个领域现在是一团糟,但我会指出 moment.js 是一个良好的示例,它在许多不同的环境和打包系统下都运行良好。

1
听到验证了解它是一团糟,就像从我所知道的那样,一堆库在一起。 ;) 谢谢 - Allyl Isocyanate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接