Javascript CommonJS - 模块在哪里?

时间:2015-10-01 12:08:35

标签: javascript module commonjs

因此,我出于通常的原因(名称空间保护和依赖项处理(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发言。

1 个答案:

答案 0 :(得分:1)

  

做包装的是什么?

节点是。它可以访问文件系统,因此它会缓存所有已经需要的文件的代码,并将其传递到需要它的命名空间。

  

最终包裹的CommonJS模块是什么样的?

包装模块的实际代码可能位于module.js,这是Node安装的lib文件夹中的核心文件。

  

"出口"全局范围内的变量?

exports是文件中module对象的属性。 module是该文件中的全局范围。 exports属性是模块返回到需要它的代码的属性。

要记住的关键是CommonJS的精神内置于Node的核心模块化代码中。 V8中没有神奇的实现,这表明module.exports是一个'。当实施ES6模块成为常态时,这一切都可能发生变化。

您可能会发现阅读this很有用。

您可能会发现放弃重新编写require()的任务会更有用。 : - )