因此,我出于通常的原因(名称空间保护和依赖项处理(require)以及公共API定义(导出))在个人项目中使用模块。我编写了自己的require()方法,并使用标准模块模式 - 即:
var myModule = (function() {
var exports = {};
function sayHello() {
return "hi";
}
exports.sayHello = sayHello;
return exports;
})();
所以我想在CommonJS标准上标准化我的东西(这是针对服务器端的JS而我的问题是不关于CommonJS与其他模块标准)。我读到的关于CommonJS的一切都说模块看起来像这样
function sayHello() {
return "hi";
}
exports.sayHello = sayHello
那就是它!但那不是一个模块。必须将此包装为实际模块!我还没有找到一个讨论CommonJS模块的网站,该模块说明了如何将其变成实际模块。我错过了其他人似乎都知道的东西吗?
所以我的问题是:
做包装的是什么? - 即什么把它变成一个实际的模块?我认为是某种类型的库。
最终包裹的CommonJS模块是什么样的?我想编写一个CommonJS标准的实现,但是找不到最终模块应该是什么样的文档。
"出口"全球范围内的变量?如果没有,如果未在模块代码的主体中显式声明导出对象,那么它是什么?谁来做 - 模块的来电者?
荡。我自己写的时候看起来很简单。现在看起来像是魔术。一些综合文档的链接会很棒。
注意:我知道很少关于node.js并且不打算在这个项目中使用它,所以如果你回答,请不要回答的node.js发言。
答案 0 :(得分:1)
做包装的是什么?
节点是。它可以访问文件系统,因此它会缓存所有已经需要的文件的代码,并将其传递到需要它的命名空间。
最终包裹的CommonJS模块是什么样的?
包装模块的实际代码可能位于module.js
,这是Node安装的lib
文件夹中的核心文件。
"出口"全局范围内的变量?
exports
是文件中module
对象的属性。 module
是该文件中的全局范围。 exports
属性是模块返回到需要它的代码的属性。
要记住的关键是CommonJS的精神内置于Node的核心模块化代码中。 V8中没有神奇的实现,这表明module.exports
是一个'。当实施ES6模块成为常态时,这一切都可能发生变化。
您可能会发现阅读this很有用。
您可能会发现放弃重新编写require()
的任务会更有用。 : - )