美文网首页
Node学习笔记一:Node.js和CommonJS规范

Node学习笔记一:Node.js和CommonJS规范

作者: hohov | 来源:发表于2018-01-17 16:54 被阅读0次

好久没更新了,最近在看《深入浅出nodejs》,就摘一点点下来吧。

在CommonJS模块规范中,每个模块文件中存在着require、exports、module这3个变量,但是它们在模块文件中没有定义,是从哪里来的呢?甚至在Node的API文档中,每个模块中还有__filename、__dirname这两个变量的存在,它们又是从何而来的呢?

事实上,在编译的过程中,Node对获取的JavaScript文件内容进行了头尾包装。在头部添加了(function(exports, require, module, __filename, __dirname){\n,在尾部添加了\n}); 。一个正常的JavaScript文件会被包装成如下的样子:

(function (exports, require, module, _ _ filename, _ _ dirname) {

    var math = require('math');

    exports.area = function(radius){

        return Math.PI * radius * radius;

    };

});

这样每个模块文件之间都进行了作用域隔离。包装之后的代码会通过vm原生模块的runInThisContext()方法执行(类似eval,只是具有明确上下文,不污染全局),返回一个具体的function对象。最后,将当前模块对象的exports属性,require()方法,module(模块对象自身),以及在文件定位中得到的完整路径和文件目录作为参数传递给这个function()执行。

这就是这些变量并没有定义在每个模块文件中确存在的原因。在执行之后,模块的exports属性被返回给了调用方。exports属性上的任何方法和属性都可以被外部调用到,但是模块中的其余变量或属性则不可直接被调用。

这就是Node对CommonJS模块规范的实现。

以上摘自《深入浅出nodejs》。

相关文章

  • CommonJS AMD CMD UMD

    CommonJS CommonJS是服务器端模块的规范,Node.js采用了这个规范。 根据CommonJS规范,...

  • CommonJS和AMD

    CommonJS CommonJS是服务器端模块的规范,Node.js采用了这个规范。 根据CommonJS规范,...

  • common、AMD、CMD区别

    CommonJS CommonJs 是服务器端模块的规范,Node.js采用了这个规范。 根据CommonJS规范...

  • 模块化规范

    服务器端规范 CommonJS Node.js CommonJS 定义JavaScript语言后端规范+ 后端语言...

  • node.js初体验

    node.js初体验 前言 在学习webpack和vue的过程中经常会遇到关于node的知识,CommonJS规范...

  • commonjs amd cmd

    Commonjs Commonjs是一个偏向于服务器端的规范。Node.js采用了这个规范。 根据CommonJS...

  • 前端模块加载规范

    模块加载规范:CommonJS、AMD 和 CMD,而框架Node.js、RequireJS 和 Seajs 分别...

  • Node学习笔记一:Node.js和CommonJS规范

    好久没更新了,最近在看《深入浅出nodejs》,就摘一点点下来吧。 在CommonJS模块规范中,每个模块文件中存...

  • Node.js 模块机制

    Node.js 模块机制 Node.js 模块机制采用了 Commonjs 规范,弥补了当前 JavaScript...

  • module模块化

    模块化规范 CommonJS : node.js require('')... AMD : require.j...

网友评论

      本文标题:Node学习笔记一:Node.js和CommonJS规范

      本文链接:https://www.haomeiwen.com/subject/oxyuoxtx.html