node编程中最重要的思想就是模块化,import 和 require 都是被模块化所使用。在 ES6 当中,用 export 导出接口,用 import 引入模块。但是在 node 模块中,使用module.exports导出接口,使用 require 引入模块。
#两者的区别如下:
#遵循规范:
require 是 AMD 规范引入方式
import是 ES6 的一个语法标准,如果要兼容浏览器的话必须转化成 [ES5]的语法
调用时间:
require是运行时调用,所以require理论上可以运用在代码的任何地方
import是编译时调用,所以必须放在文件开头
本质:
require 是赋值过程。module.exports后面的内容是什么,require的结果就是什么,比如对象、数字、字符串、函数等,然后再把require的结果赋值给某个变量,它相当于module.exports的传送门
import 是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用[babel]支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require
import 虽然是 es6 中的语法,但就目前来说,所有的引擎都还没有实现import。
我们在 node 中使用 babel 支持ES6(在 node 当中,比如 node.js 代码,也不能直接使用 import 来导入,必须使用 babel 支持才能使用 import 语法),实际上也是将 ES6 [转码]为 ES5 再执行,import 语法实际上会被转码为 require。这也是为什么在模块导出时使 module.exports,在引入模块时使用 import 仍然起效,因为本质上,import 会被转码为 require 去执行。
#2、require() | exports 的用法
通过require引入基础数据类型时,属于复制该变量。通过require引入复杂数据类型时,属于浅拷贝该对象。
#2.1、导入模块 require() 的用法
require() 函数用于在当前模块中加载别的模块。在函数内写入模块的路径即可(相对路径和绝对路径都行)
#2.2、输出接口 exports 的用法
exports 对象是当前模块的导出对象,用于导出该模块的方法或属性。别的模块通过 require() 函数引用别的模块时实际上得到的就是别的模块的 exports 对象:
导出模块的方法或者属性可以直接用 exports,也可以使用 module.exports 来进行导出。通过module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象。