随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂。Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。但是,Javascript不是一种模块化编程语言,它不支持"类"(class),包(package)等概念,更遑论"模块"(module)了。
ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,旨在成为浏览器和服务器通用的模块解决方案。其模块功能主要由两个命令构成:export 和 import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。
1.什么是模块化开发
传统非模块化开发有如下的缺点: - 命名冲突 - 文件依赖
模块化规范: - CommonJS模块化规范 - ES6模块化规范
2.CommonJS模块规范
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
实例: 1)创建“module”文件夹
2)导出模块 创建 module/mathoperate.js
// 定义成员:
const sum = function(a,b){
return parseInt(a) + parseInt(b)
}
const subtract = function(a,b){
return parseInt(a) - parseInt(b)
}
const multiply = function(a,b){
return parseInt(a) * parseInt(b)
}
const divide = function(a,b){
return parseInt(a) / parseInt(b)
}
// 导出成员:
/*
module.exports = {
sum: sum,
subtract: subtract,
multiply: multiply,
divide: divide
}*/
//简写
module.exports = {
sum,
subtract,
multiply,
divide
}
3)导入模块
创建 test.js
//引入模块,注意:当前路径必须写 ./
const m = require('./module/mathoperate')
console.log(m)
const result1 = m.sum(1, 2)
const result2 = m.subtract(1, 2)
const result3 = m.multiply(2,3);
const result4 = m.divide(10,5);
console.log(result1)
console.log(result2)
console.log(result3)
console.log(result4)
运行结果:
{
sum: [Function: sum],
subtract: [Function: subtract],
multiply: [Function: multiply],
divide: [Function: divide]
}
3
-1
6
2
3.ES6模块化规范
1)创建 es6模块化 module/api.js
export function getList() {
console.log('获取数据列表')
}
export function save() {
console.log('保存数据')
}
2)创建 test.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="module">
import {getList, save } from "./module/api.js"
getList()
save()
</script>
</body>
</html>
运行结果:
获取数据列表
保存数据
ES6模块化的另一种写法
1)创建 es6模块化 module/api.js
export default {
getList() {
console.log('获取数据列表2')
},
save() {
console.log('保存数据2')
}
}
2)创建 test.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="module">
import user from "./module/api.js"
user.getList()
user.save()
</script>
</body>
</html>
运行结果:
获取数据列表2
保存数据2