1:之前的js的模块 function a(){...} function b(){...} 把简单的模块及记录状态的变量简单的放在一起就是一个模块。 缺点:污染了全局变量, 立即执行函数写法 var module=(function(){ var _count = 0; var m1 = function(){ //... }; var m2 = function(){ //... }; return { m1 : m1, m2 : m2 }; }())() 立即执行函数可以达到不暴露私有成员的目的。 2:现在js中的两种模块规范commonjs和amd commonjs:nodejs的模块系统是根据commonjs规范实现的,commonjs中有一个全局性方法requirejs()用于加载模块 var math=require('math')
amd:是采用require异步加载模块,所有依赖这个模块的语句,都定义在一个回调函数中,加载完后,这个回调函数才会执行, require(['math'],function(math){ math.add(); }) import/export:es6支持的导入,导出 require:node和es6支持的导入 module.exports/exports:node支持的导出 node里的规范遵循commonjs规范,载入第三方模块:require() 模块化系统所具有的能力: 定义封装的模块 定义新模块对其它模块的依赖 可对其它模块的引入支持 commonjs是服务器端模块化规范,nodejs采用了这个规范,一个单独的文件就是一个模块,加载模块用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象 commonjs加载模块式同步的,加载完成后执行后面的操作 例:function fn(){ this.name="name"; this.age="age"; this.say=function(){} } var f=new fn(); export.foo=f; require方法读取 var test=require('./foo').foo amd:异步加载模块,关键字require require(['math'],function(math){ //加载完后执行回调函数 math }) Js中模块化的解决方案有哪些? Node.js中的commonJS---服务端 AMD,requirejs CMD,seajs Browserify Es6中的import和export都源于commonJS nodejs中的模块分为两大类: 系统模块:源代码中已经编译了,模块引入直接加载到内存,有http,fs,path,url,net模块。 自定义模块:自己的模块,引入即可。