export&import、require&define、require&exports||module.exports之间的区别

export&import、require&define、require&exports||module.exports之间的区别

export&import

import 和export为es6语法,为模块的导入导出。
export导出有两种方式【‘命名导出’,‘默认导出’】,命名导出就是就是每个模块可以导出多个,默认导出只可以一个。

// 每个文件只可以导出一个默认导出
const demo = {
	name: '',
	handler: function() {
		console.log('this.name')
	}
}
export default demo

命名导出如下

// 命名导出可以导出多个。
export function demo001() {
 return 'testDemo'
}
export function demo002() {
 return 'testDemo002'
}

在导入使用的时候,命名导出和默认导出
命名式导出:文件的所有导出为一个对象,更像是你需要从一个对象中结构你想要的函数。

// 命名导入。
import { demo001 } from './export.js'
// 你也可以这样表示,重命名的方式进行表示,这样你在下面就可以直接使用otherName进行调用了
import { demo001 as otherName } form './export.js'

//当然也可以这样进行表示,这样allDemo就可以进行使用
import * as allDemo from './export.js'
allDemo.demo001()

默认导出

// 默认导出。
import demo from './export001.js'
// 你也可以这样表示,重命名的方式进行表示
import demo as otherDemo from './export001.js'
//这样你在下面就可以直接使用otherDemo进行使用了

在es6之前怎么解决模块的导入呐?
有两种解决方案:common.js和AMD,分别是同步导入和异步导入

common.js

导出: require(‘文件名’)
设置:exports、modules.exports
然后在调用,同步调用,如果资源不加载出来,就会出现为空,堵塞进程的加载,
为服务器提供的一种模块形式的优化
主要是用于服务器端的使用,也就是node.js。
那exports和module.exports有什么区别那?
1.module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}
2.require 引用模块后,返回的是 module.exports 而不是 exports!!!
3.exports.xxx 相当于在导出对象上挂属性,该属性对调用模块直接可见
4.exports = 相当于给 exports 对象重新赋值,调用模块不能访问 exports 对象及其属性
5.如果此模块是一个类,就应该直接赋值 module.exports,这样调用者就是一个类构造器,可以直接 new 实例。
6.若只是将属性/方法挂载在module.exports./exports.上时,exports.id=1和module.exports.id=100,module.exports.id=function(){}和exports.id=function(){},最后id的值取决于exports.id和module.exports.id的顺序,谁在后,就是最后的值
7.如果只是单一属性或方法的话,就使用exports.属性/方法。要是导出多个属性或方法或使用对象构造方法,结合prototype等,就建议使用module.exports = {}。
引用: https://www.jianshu.com/p/e452203d56c4.

AMD

AMD规范主推require.js
Amd定义模块的时候,使用的是require的异步加载,可以在调用的时候进行回调
调用: require([‘main’,function(main){
Console.log(main,’main’)
}])
设置: define(‘main’,‘depend依赖项’,function callback(depend){
Console.log(‘调取依赖成功之后的回调’)
})
理解:第一个是name,可以不进行设置,主要是挂载到全局中,方便require的调用,也可以直接调用文件。第二个为数组,也就是这个模块被加载之前的依赖是什么。依赖的依赖。callback为回调,加载模块成功之后的行为。

CMD

CMD规范主推的是sea.js
调用: require()和amd差不多
设置:define()和amd的差不多,但是不同的是,callback里面可以使用require和export,进行实时的加载依赖。也就是加载依赖的依赖,define(function(require,exports){
Const ljl = require(‘./ljl’)
Exports ljl
} )
Exports可以不用,使用return进行抛出。

CMD和AMD的区别,

依赖加载的执行时机处理不同
AMD依赖前置,可以更加清楚的知道依赖项,CMD为就近依赖的加载,需要解析一遍之后才知道那些依赖。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值