如何使纯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是这样工作的:
- 维护与加载的模块对应的标识符的映射。
- 遇到
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模块(它们提供你require
function):最stream行的是Browserify ,但是你也可以检查Webmake (我是作者)。