JS => import与require

import

import是es6为js模块化提出的新的语法。
import是用于将某个模块中导出的函数或对象、初始值导入到另一个模块中的语法。
它必须放在文件开头,而且使用格式也是确定的,不容置疑。它不会将整个模块运行后赋值给某个变量,而是只选择import的接口进行编译,这样在性能上比require好很多。require是赋值过程,import是解构过程
MDN import

import defaultExport from "module-name"; //导出默认的export default
import * as name from "module-name"; //导出默认的export default,并把所有的输出包裹到obj对象里
import { export1 } from "module-name";//导出名为export1的模块
import { export1 as alias1 } from "module-name";//导出名为export1的模块,并把export1的输出包裹到alias1对象里
import { export1 , export2 } from "module-name";//导出名为export1、export2的模块
import 'test.js'//运行模块的全局代码,但实际上并不导入任何值
var promise = import("module-name");//动态导入模块

require

require是Commonjs的规范,node应用是由模块组成的,遵从commonjs的规范。
用于引入模块、 JSON、或本地文件。
它相当于module.exports的传送门,module.exports后面的内容是什么,require的结果就是什么,对象、数字、字符串、函数……再把require的结果赋值给某个变量,相当于把require和module.exports进行平行空间的位置重叠。

// 引入本地模块:
const myLocalModule = require('./path/myLocalModule');

// 引入 JSON 文件:
const jsonData = require('./path/filename.json');

// 引入 node_modules 模块或 Node.js 内置模块:
const crypto = require('crypto');

引用知乎
引用博客园

require

  • 通过require引入基础数据类型时,属于复制该变量。
  • 通过require引入复杂数据类型时,数据浅拷贝该对象。
  • 出现模块之间的循环引用时,会输出已经执行的模块,而未执行的模块不输出(比较复杂)
  • CommonJS模块默认export的是一个对象,即使导出的是基础数据类型

import

  • 不管是基础(复杂)数据类型,都只是对该变量的动态只读引用。动态在于一个模块中变量的变化会影响到另一个模块;只读在于从某个模块引入一个变量时,不允许修改该变量的值。对于复杂数据类型,可以添加属性和方法,但是不允许指向另一个内存空间。
  • 出现模块之间的循环引用时,只要模块存在某个引用,代码就能够执行。

你可能感兴趣的:(JS => import与require)