一、vue中require与import的区别

在es6之前js一直没有自己的模块语法,为了解决这种尴尬就有了require.js的出现。在es6发布之后js又引入了import的概念。使得不清楚两者之间的区别在实际使用过程中造成了自己的误解

ES6标准发布后,module成为标准,标准使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们依然采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口。

二、require基本用法

核心概念:在导出的文件中定义 module.exports(node里的模块引用),导出的对象的类型不予限定(可以是任何类型,字符串,变量,对象,方法),在引入的文件中调用require()方法引入对象即可。


//a.js中
module.exports = {
    a: function(){
     console.log(666)
  }
}
//b.js中
var obj = require('../a.js')
obj.a()  //666

【注】:本质上是将要导出的对象赋值给module对象的export属性,然后在其他文件中通过require这个方法访问该属性

三、import的基本语法

核心概念:导出的对象必须与模块中的值一一对应,换一种说法就是导出的对象与整个模块进行结构赋值。

//a.js中
export default{    //(最常使用的方法,加入default关键字代表在import时可以使用任意变量名并且不需要花括号{})
     a: function(){
         console.log(666)
   }
}
 
export function(){  //导出函数
 
}
 
export {newA as a ,b,c}  //  解构赋值语法(as关键字在这里表示将newA作为a的数据接口暴露给外部,外部不能直接访问a)
 
//b.js中
import  a  from  '...'  //import常用语法(需要export中带有default关键字)可以任意指定import的名称
 
import {...} from '...'  // 基本方式,导入的对象需要与export对象进行解构赋值。
 
import a as biubiubiu from '...'  //使用as关键字,这里表示将a代表biubiubiu引入(当变量名称有冲突时可以使用这种方式解决冲突)
 
import {a as biubiubiu,b,c}  //as关键字的其他使用方法

四、区别

1、require 是赋值过程并且是运行时才执行, import 是解构过程并且是编译时执行。require可以理解为一个全局方法,所以它甚至可以进行下面这样的骚操作,是一个方法就意味着可以在任何地方执行。而import必须写在文件的顶部。
2、require的性能相对于import稍低,因为require是在运行时才引入模块并且还赋值给某个变量,而import只需要依据import中的接口在编译时引入指定模块所以性能稍高
3、在commom.jsmodule.exports 之后 导出的值就不能再变化,但是在es6的export中是可以的。
4、export有两种模块导出方式:命名式导出(名称导出)和默认导出(定义式导出)默认导出可以理解为另一种形式的命名导出,默认导出export default可以认为是使用了default名称的命名导出。

// d.js
export default function() {}
 
// 等效于:
function a() {};
export {a as default};

这个语法糖的好处就是import的时候,可以省去花括号{}。
简单的说,如果import的时候,你发现某个变量没有花括号括起来(没有*号),那么你在脑海中应该把它还原成有花括号的as语法。


var a = 6
export default {a}
a = 7  //在es6中的export可以


var a = 6
module.exports = a
a = 7   //在common.js中,这样是错误的

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐