前端模块化


当多人开发同一项目时,很容易就会产生命名冲突的问题,尤其是js文件,任何的js引入顺序的打乱都可能导致项目运行失败,为了解决命名冲突的问题,在ES6之前,可以使用函数闭包来解决这个问题。

即可能像这样:

;(function () {
	var flag = true;
	function add(num1,num2){
		return num1 + num2
	}
	//...
})()

这样虽然可以解决命名冲突的问题,但也使得代码的复用性变得极差,因为其它的文件将无法再引用使用了函数闭包的文件中的变量或函数。

于是,为了解决这个问题,可以像这样:

;
var ModuleA = (function () {
	var obj = {}
	var flag = true;
	function num(num1,num2){
		return num1 + num2
	}
	//...
	obj.flag = flag
	obj.num = num
	return obj
})()

把要复用的属性或函数都放入到一个obj对象中,然后return该对象,那么当其它js文件想使用这些数据时,直接就可以通过 ModuleA.flag 等方式拿来使用。

这是早期使用的一种方法,现如今,前端模块化早已演变出了一些前端模块化开发规范,常用的有:CommonJS、AMD、CMD、Modules(ES6)


CommonJS(了解)

导出规范:

module.exports = {
	flag:true;
	func(A,B){
		//...
	}
}

导入规范:

let {flag,func} = require('moduleA')

ES6 模块化

在ES6中使用模块化,需要在script标签中加上type='module'属性。

<script src="*.js" type="module"></script>

export的使用:

// 1、导出模块中实现已定义过的变量
export {
	flag,
	num
}

// 2、在导出时定义要导出的变量
export let flag = true
export function num(num1,num2){
	return num1 + num2
}
export class Person{
	name = '小明',
	age = 18
}

//3、在导出时用as指定别名
export {
	mynane as name,
	myfunc as func
}

import的使用:

//1、导入指定的变量
import {flag,num} from './js/*.js'

//2、导入全部
import * from './js/*.js'

//3、导入时解决多文件命名冲突问题
import {myName as name1} from "./test1.js";
import {myName as name2} from "./test2.js";

default

//通过default导出的变量可以允许导入它的模块自定义该变量的名字,但default在一个模块中只能使用一次
export default sname
export default function(){
	//...
}
export default {
	//...
}

import name from './js/*.js' //导入default不需要{},并且可以重新自定义变量名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值