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关键字的其他使用方法
————————————————
它们之间的区别
- require 是赋值过程并且是运行时才执行, import 是解构过程并且是编译时执行。require可以理解为一个全局方法,所以它甚至可以进行下面这样的骚操作,是一个方法就意味着可以在任何地方执行。而import必须写在文件的顶部。
- require的性能相对于import稍低,因为require是在运行时才引入模块并且还赋值给某个变量,而import只需要依据import中的接口在编译时引入指定模块所以性能稍高
- 在commom.js 中module.exports 之后 导出的值就不能再变化,但是在es6的export中是可以的。
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中,这样是错误的
原文链接:https://blog.csdn.net/caseywei/article/details/90710749