简介
随着网站逐渐变成”互联网应用程序”,嵌入网页的Javascript代码越来越庞大,越来越复杂。
Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。但是,Javascript不是一种模块化编程语言,它不支持”类”(class),包(package)等概念,也不支持”模块”(module)。
模块化规范
- CommonJS模块化规范
-
ES6模块化规范
CommonJS规范
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
CommonJS使用 exports 和require 来导出、导入模块
创建文件夹module
创建common-js/四则运算.js
// 定义成员:
const sum = function(a,b){
return a + b
}
const subtract = function(a,b){
return a - b
}
const multiply = function(a,b){
return a * b
}
const divide = function(a,b){
return a / b
}
导出模块中的成员
// 定义成员:
const sum = function(a,b){
return a + b
}
const subtract = function(a,b){
return a - b
}
const multiply = function(a,b){
return a * b
}
const divide = function(a,b){
return a / b
}
// 导出成员:
module.exports = {
sum: sum,
subtract: subtract,
multiply: multiply,
divide: divide
}
可简写
// 定义成员:
const sum = function(a,b){
return a + b
}
const subtract = function(a,b){
return a - b
}
const multiply = function(a,b){
return a * b
}
const divide = function(a,b){
return a / b
}
//简写
module.exports = {
sum,
subtract,
multiply,
divide
}
创建common-js/引入模块.js
//引入模块,注意:当前路径必须写 ./
const m = require('./四则运算.js')
console.log(m)
const r1 = m.sum(1,2)
const r2 = m.subtract(1,2)
console.log(r1,r2)
运行程序
node 引入模块.js
ES6模块化规范
ES6使用 export 和 import 来导出、导入模块。
创建项目文件夹module-es6
创建src/userApi.js文件,导出模块
export function getList() {
console.log('获取数据列表')
}
export function save() {
console.log('保存数据')
}
创建src/userTest.js文件,导入模块
//只取需要的方法即可,多个方法用逗号分隔
import { getList, save } from './userApi.js'
getList()
save()
注意:这时的程序无法运行的,因为ES6的模块化无法在Node.js中执行,需要用Babel编辑成ES5后再执行。
初始化项目
npm init -y
配置.babelrc
{
"presets": ["es2015"],
"plugins": []
}
安装转码器,在项目中安装
npm install --save-dev babel-preset-es2015
package.json中定义运行脚本
{
// ...
"scripts": {
"build": "babel src -d dist"
}
}
执行转码命令
npm run build
运行程序
node dist/userComponent.js
ES6导出导入简化写法,也是工作中常用写法
创建src/userApi.js文件,导出模块
export default {
getList() {
console.log('获取数据列表2')
},
save() {
console.log('保存数据2')
}
}
创建src/userTest.js文件,导入模块
import user from "./userApi2.js"
user.getList()
user.save()