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

require和import(CommonJS规范和es6规范)的区别和使用

时间:2023-04-03 14:38:43 Node.js

CommonJS在早期没有模块化思想的情况下,没有很好的代码编写规范,导致代码很多,逻辑重复,缺乏组织性强,管理维护难度大。这也让很多开发者头疼。随着JavaScript社区的发展,社区对JavaScript制定了相应的规范,CommonJS规范的提案得到了大家的认可和广泛使用。2009年,CommonJS诞生。CommonJS简介CommonJS实现了Javascript的模块化规范,规范了模块的特性和模块之间的相互依赖关系,使得代码更好的编写和维护,提高了代码的复用性。定义每个文件都是一个模块(模块变量代表当前模块)并且有自己的作用域,每个文件中定义的变量、函数和类都是私有的,对其他模块不可见。模块的exports属性是一个对外接口,只能加载和识别通过exports导出的属性。Node是基于CommonJs规范实现的,因为CommonJS规范的加载模块是同步的,服务器中的Node模块直接存储在服务器本地硬盘中,加载自然更快。可以说node项目是目前CommonJs规范实际应用中最好的。ECMAScript6(简称ES6)ECMAScript是(EuropeanComputerManufacturersAssociationScript)的缩写,是由ECMA国际标准化组织定制的JavaScript脚本语言的标准化规范。ECMAScript6是ECMA于2015年发布的JavaScript规范标准,解决了ES5的诸多先天不足,引入了模块化思想。ES6模块的设计思想是尽可能静态化,这样模块的依赖关系和输入输出的变量在编译时就可以确定。importimport是ES6中的语法标准,也用于加载模块文件。import函数可以读取并执行一个JavaScript文件,然后返回模块的export命令指定的代码。export和exportdefault都可以用来导出常量、函数、文件和模块。可以有多个导出,但只有一个导出默认值。require和import的区别1.require是CommonJS规范的模块化语法,import是ECMAScript6规范的模块化语法;2、require在运行时加载,import在编译时加载;3.require可以写在代码的任何地方,import只能写在文件的顶部,不能用在条件语句或者函数作用域中;4、require通过module.exports导出的值不能再改变,import通过export导出的值可以改变;5;require通过module.exports导出exports对象,import为通过export导出的指定输出代码;6、模块的属性是在require运行的时候引入的,所以性能比较低,而模块的属性是在import编译的时候引入的,所以性能略高。使用require定义模块:模块变量代表当前模块,其exports属性为对外接口。模块可以通过exports从模块中导出,其他文件加载模块其实就是读取module.exports变量,可以是变量,函数,对象等,如果在node中使用exports导出,系统会为您将其转换为module.exports,但导出需要定义导出名称。加载模块:require方法用于加载后缀为js的模块文件。如果参数字符串以“/”开头,则表示加载绝对路径的模块文件。如果参数字符串以“./”开头,则表示加载的模块文件是相对路径的模块文件,同步加载模块,并按照JavaScript运行时搜索到的顺序进行处理。使用import定义模块:可以在模块中使用export关键字从模块中导出变量、对象、函数、类等,然后通过import语句使用。一个模块中只能有一个exportdefault,但是可以有多个exports。加载模块:导入加载模板可以有多种形式,可以以整个模块内容、单一接口、多个接口、带别名的接口、默认值的形式加载。这样就可以按需加载模块,提高代码的性能。