13.模块化

13.1.什么是模块化

模块化是一种处理复杂系统分解为更好的可管理模块的方式。通俗的讲就是把一个复杂的功能拆分成多个小功能,并且以一种良好的机制管理起来,这样就可以认为是模块化。就像作家把书分成很多章节来写一样,程序员写代码分模块来写也是一种良好的习惯。从本质上来讲,一个模块就是一堆代码而已

使用模块化方式写代码,有非常多的优点,例如,可维护性好、避免全局变量污染、可复用性好等,下面我们来看看es5中如何实现模块化封装

var module1 = (function () {
var _count = 0 var fn1 = function () {
alert(_count)
}
var fn2 = function () {
console.log(_count)
}
return {
fn1: fn1,
fn2: fn2
}
})() module1.fn1() //0
module1.fn2() //0
console.log(module1._count); //undefined

13.2.环境准备

在具体写测试demo之前,我们需要准备一下环境

1.进入到项目目录,初始化项目

npm init -y

2.安装webpack和webpack-cli

npm install webpack webpack-cli -D

这里“-D”是“--save-dev”的简写

3.安装babel

npm install babel-core babel-loader babel-preset-env --save-dev

4.配置babel, 在项目目录下新建.babelrc文件,然后输入


{
"presets": ["env"]
}

4.测试环境是否成功,在项目下新建index.js,写入代码

()=>{console.log(1)}

5.使用webpack打包

./node_modules/.bin/webpack --mode development

13.3.export命令和import命令

模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。通俗的讲export用来导出内容,import用来引入内容

1.导出和导入变量

我们新建一个modules目录,在下面新建一个文件a.js写相关代码

//导出变量
let username = 'xiaoqiang'
let password = '123'
export {username, password}

在index.js文件中引入a.js模块代码

//导入变量
import {username,password} from './modules/a.js'
console.log(username, password)

2.导入和导出函数

//导出函数
export function hello() {
return "hello nodeing"
}
//导入函数
import {hello} from './modules/a'
console.log(hello())

3.导入和导出类

//导出一个类
export class hello{
fn(){
console.log('hello world!!!')
}
}
//导入一个类
import {hello} from './modules/a' console.log(hello) let obj = new hello() obj.fn()

注意1: 不要直接导出一个值

export 1  //错误

let m = 20

export m  //错误

注意2: 不要直接导出函数或者类


function fn(){} export fn class hello{} export hello

注意3: export语句要在模块最顶层,放在块级作用域内会报错

{
export let a=10 //报错
}

注意4: 可以批量接收导出的内容

//导出变量、函数、类

export class hello{
fn(){
console.log('hello world!!!')
}
} export let A = 10 export function Fn() {
console.log(111)
}
//批量导入内容,所有的变量 类 函数等都挂载到amodule身上
import * as amodule from './modules/a' console.log(amodule.A, amodule.Fn, amodule.hello)

13.3.export default命令

从前面的例子中,我们需要思考一个问题,每次使用一个模块的时候,我们都需要知道这个模块里面到底有哪些变量、函数、类,我们要根据这些类名来导入,这样方便么?为了更方便的写代码,我们可以使用export default命令,为模块指定默认输出

//默认输出变量
let a = 10
export default a

注意: 不要写成这样

export default let a = 10 // 报错
//导入模块
import aa from './modules/a'
console.log(aa)

使用export default命令导出,再导入的时候不用加括号{}, 名字可以自定义了

推荐的模块导入导出方式:

//导出内容
let a = 10 function Fn() {
console.log(111)
} class Hello{
Fn2(){
console.log(111)
}
} export default {
a,
Fn,
Hello
}
//导入内容
import aa from './modules/a'
console.log(aa)

视频教程地址:http://edu.nodeing.com/course/50

es6+最佳入门实践(13)的更多相关文章

  1. es6+最佳入门实践(14)

    14.模版字符串 模版字符串(template string)是增强版的字符串,定义一个模版字符串需要用到反引号 let s = `这是一个模版字符串` console.log(s) 14.1.模版字 ...

  2. es6+最佳入门实践(12)

    12.class基础用法和继承 12.1.class基础语法 在es5中,面向对象我们通常写成这样 function Person(name,age) { this.name = name; this ...

  3. es6+最佳入门实践(10)

    10.Generator 10.1.Generator是什么? Generator函数是ES6提供的一种异步编程解决方案.在它的内部封装了多个状态,因此,又可以理解为一种状态机,执行Generator ...

  4. es6+最佳入门实践(9)

    9.Iterator和for...of 9.1.Iterator是什么? Iterator又叫做迭代器,它是一种接口,为各种不同的数据结构提供统一的访问机制.这里说的接口可以形象的理解为USB接口,有 ...

  5. es6+最佳入门实践(8)

    8.Promise 8.1.什么是异步? 要理解异步,首先,从同步代码开始说 alert(1) alert(2) 像上面的代码,执行顺序是从上到下,先后弹出1和2,这种代码叫做同步代码 alert(0 ...

  6. es6+最佳入门实践(7)

    7.set和map数据结构 7.1.什么是set? Set就是集合,集合是由一组无序且唯一的项组成,在es6中新增了set这种数据结构,有点类似于数组,但是它的元素是唯一的,没有重复 let st = ...

  7. es6+最佳入门实践(6)

    6.Symbol用法 6.1.什么是Symbol? Symbol是es6中一种新增加的数据类型,它表示独一无二的值.es5中我们把数据类型分为基本数据类型(字符串.数字.布尔.undefined.nu ...

  8. es6+最佳入门实践(5)

    5.对象扩展 5.1.对象简写 在es5中,有这样一种写法 var name = "xiaoqiang"; var age = 12; var obj = { name : nam ...

  9. es6+最佳入门实践(4)

    4.函数扩展 4.1.参数默认值 默认参数就是当用户没有传值的时候函数内部默认使用的值,在es5中我们通过逻辑运算符||来实现 function Fn(a, b) { b = b || "n ...

随机推荐

  1. Mysql 启动运行

    MYSQL默认端口:3306用户: root   也可自己添加用户启动数据库服务名: MYSQL (在安装的时候会设置) 在开始菜单栏->附件->右键命令提示符->以管理员身份运行: ...

  2. Windows Server Backup 裸机恢复

    1.打开“Windows Server Backup”选择本地备份,并在操作栏选择“一次性备份”:(在实际生产环境中可以根据自己的需求,选择一次性备份还是选择备份计划.) 2.打开“一次性备份向导”, ...

  3. html5判断设备的动作

    相应的事件 deviceorientation事件提供设备的物理方向信息,表示为一系列本地坐标系的旋角. devicemotion事件提供设备的加速信息,表示为定义在设备上的坐标系中的卡尔迪坐标.其还 ...

  4. python接口自动化: CAS系统验证,自动完成登录并获取token,遇到302请求重定向设置(requests模块 allow_redirects=False)即可

    import requestsimport re import requests import re class Crm_token(object): try: username=int(input( ...

  5. ActiveRecord-连接多张表之单表继承

    ActiveRecord-连接多张表之单表继承 1. 基本概念 Rails提供了两种机制,可以将复杂的面向对象模型映射为关系模型,即所谓的单表继承(single-table inheritance)和 ...

  6. zabbix从入门到精通

    第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...

  7. 官方文档 恢复备份指南八 RMAN Backup Concepts

    本章内容 Consistent and Inconsistent RMAN Backups Online Backups and Backup Mode Backup Sets Image Copie ...

  8. laravel 学习随笔(一)

    1.路由参数:路由参数总是通过花括号进行包裹,参数在路由被执行时会被传递到路由的闭包.(路由参数不能包含“-”字符,如有需要可以用“_”代替):

  9. Reactor模式是什么(转载)

    一.Reactor模式是什么反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式.当客户端请求抵达后,服务处理程序使用多路分配 ...

  10. A - 移动的骑士

    A - 移动的骑士 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem Desc ...