gpt4 book ai didi

Javascript CommonJS - 模块在哪里?

转载 作者:行者123 更新时间:2023-11-27 23:48:55 27 4
gpt4 key购买 nike

因此,我出于常见原因(命名空间保护和依赖项处理(需要)以及公共(public) 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 标准的实现,但找不到任何有关最终模块应该是什么样子的文档。

“exports”变量是否在全局范围内?如果没有,如果没有在模块代码主体中显式声明,那么什么向模块提供导出对象?谁在做这件事——模块的调用者?

当当。我自己写的时候觉得很简单。现在看来就像魔法一样。一些综合文档的链接会很棒。

注意:我对 Node.js 知之甚少,并且不打算在这个项目中使用它,所以如果你回答,请不要在 Node.js 中回答 -说话。

最佳答案

What is doing the wrapping?

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

What does this final, wrapped, CommonJS module look like?

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

Is the "exports" variable in the global scope?

exports 是文件中module 对象的一个​​属性。 module 是该文件内的全局范围。 exports 属性是模块返回给需要它的代码的内容。

要记住的关键一点是 CommonJS 精神内置于 Node 的核心模块化代码中。 V8 中没有神奇的实现来规定 module.exports 是一个“东西”。当实现 ES6 模块成为常态时,这一切可能都会改变。

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

您可能会发现放弃重写 require() 的追求会更有用。 :-)

关于Javascript CommonJS - 模块在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32887258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com