众所周知JavaScript先天性缺乏模块机制,CommonJS规范中提出了模块等概念,说一句题外话,node能有现在的成就离不开CommonJS规范的影响。在CommonJS规范下,node引入的模块这个概念,引入正题:JS模块的创建和编译;
一.JavaScript模块的创建
在没有模块机制以前,是通过script标签引入js代码,所以只能以命名空间等方式约束代码。了解node的同学一定熟悉 require, exports, module
这几个变量吧,还有__dirname, __filename
,那么它是怎么来的呢?在node中一个.js文件就是一个模块,node在编译模块文件的时候,会在文件的头部添加(function (exports, module, require, __filename, __dirname) {
,在尾部添加})
,这不就是我们熟悉的立即执行函数,这样每个模块之间都进行了作用域隔离,不会污染全局。
接下来我们一个个的讲这几个变量是什么,熟悉node的同学可以快速的看看,一看就懂。
(1)module 模块自身 下图是我自己创建了一个js文件,在node环境下进行编译

(2)exports
细心的同学会发现module对象中有一个exports属性,也是一个对象,对没错,exports就是module的一个对象。
(3)require
(4)__dirname (完整文件路径)和__filename(文件目录)

这就是这几个变量可以直接被调用的原因
网友评论