当前位置: 首页 > 后端技术 > Node.js

JS模块化

时间:2023-04-03 12:16:25 Node.js

CommonJSNode使用CommonJS模块规范。Node中的每个文件都是一个具有自己范围的模块。模块中定义的变量和函数都是私有的。模块中有四个重要的变量global、module、exports、require。Node中的全局变量global类似于浏览器的window对象。在全局下声明的变量可以在所有模块中访问。module变量代表当前模块,module.exports属性代表当前模块的对外输出接口。当其他文件使用require引用模块时,实际读取的是module.exports变量。//模块a.jsconstnum=1module.exports={num,add:function(x,y){returnx+y}}//模块b.js,importa.jsconsta=require('./a.js')//{num:1,add:fn}exports变量是对module.exports的引用;相当于在最上面声明了一个变量varexports=module.exports,exports不能直接赋值,所以不能指向module。exports,所以使用exports外部输出接口的写法如下,//modulea.jsexports.num=1exports.add=function(x,y){returnx+y}CommonJS规范加载模块是同步的,并且加载完成后才能加载执行以下操作。同时,模块的输出是值的副本,即一个值一旦输出,模??块内部的变化不会影响这个值。AMDAMD:AsynchronousModuleDefinition,异步模块定义,是RequireJS在推广过程中的模块定义的标准化输出。require.js加载完成后,通过回调方法加载data-main中的js,然后require.config方法指定第三方资源路径,define方法定义自己写的模块,最后require方法用于加载模块define方法自定义模块,不需要在require.config中配置路径CMDCMD:CommonModuleDefinition,通用模块定义,是SeaJS的模块定义在推广过程中的标准化输出,类似于AMD的语法,不同的是AMD在定义模块时必须声明其依赖的模块,而CMD仅在使用某个模块时加载它。AMD和CMD都实现了前端资源模块,现在ES6和Webpack打包工具应该用的少了。ES6ModuleES6在语言标准层面实现了模块功能。模块功能主要由两个命令组成:export和import。export命令用于指定模块的对外接口,import命令用于导入其他模块提供的功能。我们平时的项目一般都是基于webpack进行处理的。如果想在浏览器中直接加载ES6模块,和之前一样使用