如何使纯JavaScript中的node.js需要函数

如何使纯JavaScript中的node.js require函数? 我已经在网上search任何解决scheme,但我没有find。

一些沿着这条线:

 function require(path){ //Code return data; } 

我已经看到的一些post:

  • node.js中的require()如何工作?
  • Node.js“需要”function和参数

CommonJSfunction在Curl库中实现正如在其他答案中指出的, RequireJS遵循与Node的CommonJS不同的AMD规范var foo = require('foo'); 规范。

curl特征一目了然:

  • 并行加载AMD格式的JavaScript模块
  • 加载CommonJS /节点模块(使用define()包装时的v1.1)
  • 加载CommonJS /节点模块(使用cjsm11加载程序时解包)
  • 并行加载非AMD JavaScript文件。
  • 并行加载CSS文件和文本文件
  • 在执行javascript之前等待依赖(js,css,text等)
  • 等待domReady,如果需要的话
  • 允许几乎无限的文件和依赖关系组合
  • 使用Safari 5+,IE6 +以及最近的Chrome,FF,Opera进行testing

Browserify不直接实现CommonJS,而是将你的CommonJS样式代码转换成一个包含在html中的bundle.js文件。

Webmake似乎提供了与Browserify类似的function,同时也允许其他文件types。

简而言之,CommonJS是这样工作的:

  1. 维护与加载的模块对应的标识符的映射。
  2. 遇到require('lib')时,检查列表以查看是否已加载。 如果库尚未加载(关键不在库中),请通过XHRRequest加载脚本。 如果库已经加载,则返回对应于该key的值。

这就是为什么所需的模块总是单身。

RequireJS使用AMD加载器,而node.js使用CommonJS模式加载。

Browserify允许您在构build步骤中包装所有代码,以便在浏览器中可以使用require()语句。

为了推出自己的产品(我不build议这样做,因为Browserify已经是一个经过战斗考验的stream行库),您必须自己映射所有模块,并预先加载,或者同步加载(因为这是必要的CommonJS规范),在阻塞(和不受欢迎的)的方式。

你的函数中的code应该包含完整的模块parsing逻辑,这可能不那么简单。 你可以在node.js – > https://github.com/joyent/node/blob/master/lib/module.js中查看module模块的源代码

有很多工具可以帮助你在node.js之外移植CJS模块(它们提供你requirefunction):最stream行的是Browserify ,但是你也可以检查Webmake (我是作者)。