es6模块化

本文介绍了ES6的模块化机制,包括导出与导入的方式,并对比了CommonJS和ES6模块化的差异。此外,讲解了npm包管理工具的使用,如全局和局部依赖的安装,以及Babel如何将ES6代码转换为ES5以兼容旧版浏览器。同时,提到了AMD模块化规范的特点。
摘要由CSDN通过智能技术生成

一.ES6介绍
ES6是ES2015、ES2016、ES2017他们的统称
官方名字:《ECMAScript 2015 标准》=> ES6
二.包管理机制(npm)
初始化nodejs项目 npm init -y
生成一个package.json文件,该文件中保存了项目所有相关信息
1.全局依赖
cnpm install babel-cli --global
简写: cnpm i babel-cli -g
2.局部依赖
2.1产品依赖 dependencies
cnpm install babel-cli --save
简写:cnpm i babel-cli -S
2.2开发依赖/环境依赖 devDependencies
cnpm install babel-cli --save-dev
简写:cnpm i babel-cli -D
三.Bable安装与使用
babel是一个广泛使用的es6转换器,可以将ES6代码转为ES5代码,从而在老版本的浏览器执行
1. babel-cli安装
cnpm install babel-cli --global
简写:cnpm i babel-cli -g
2. 安装预设(转码的标准)babel-preset-latest
cnpm install --save-dev babel-preset-latest
简写:cnpm i babel-preset-latest -D

  1. 使用:
    1)在项目的根目录新建文件.babelrc文件

    “presets”: “latest”

    2)转码命令
    ·转码并输出到控制台
    babel xxx.js
    ·转码并输出到新的文件
    babel xxx.js --out-filt xxx1.js 简写:babel xxx.js -o xxx1.js
    ·转码并输出整个文件夹
    babel 文件夹 --out-dir 文件夹 简写:babel 文件夹 -d 文件夹
    四、模块化机制
    模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来
    好处:
    1)防止命名冲突;
    2)代码复用;
    3)高维护性

常用模块化规范:CommonJs、AMD、CMD、ES6
服务器:CommonJs(Node.js)
浏览器:AMD(require.js)、CMD(sea.js)
浏览器端与服务器端通用:ES6
注意:从 v13.2 版本开始,Node.js 已经默认打开了 ES6 模块支持。在v12的版本里面,需要在package.json中设置{“type”: "module”}

ES6模块化

ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入
导出export
1.单个导出

//hello.js
export let a = 1;
export let name = 'Terry';
export function add(a,b){
	return a+b;
}

2.按需导出

let name = 'Terry';
function add(a,b){
	return a+b;
}
export {name,add}

3.默认导出
一个模块只能有一个默认导出,不能使用 var、let 或 const 用于导出默认值 export default

//default.js
export default{
	name:'Terry',
	age:20,
	sayHello:function(){
		console.log("hello,world");
	}
}
//var a = 1;
//export a;
//报错,因为没有提供对外的接口,应该使用export var a = 1; 或export {a}

重命名导出

let firstName = 'Terry';
export {firstName as name};

导入import
导入时也可以使用as重命名
1.统一全部导入

import * as newName from './hello.js'

2.按需导入

import {name,add} from './hello.js'

3.导入export default导出的模块

import obj from "./default.js"

CommonJs模块化

CommonJS 模块就是对象,输入时必须查找对象属性

//对象解构(模式匹配)
let data={
	name:'zs',
	age:12
}
let {name,age}=data;//name为zs,age为12

导出module

//module.js
module.exports={
	firstName:'zhang',
	lastName:'san'
}

导入require

let {firstName,lastName} = require('./module.js')
//等同于
let obj = require('./module.js')
let first = obj.firstName;
let last = obj.lastName;

AMD模块化规范

AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

CommonJS与ES6模块化规范区别

CommonJS

· 对于基本数据类型,属于复制。即会被模块缓存。同时,在另一个模块可以对该模块输出的变量重新赋值。
· 对于复杂数据类型,属于浅拷贝。由于两个模块引用的对象指向同一个内存空间,因此对该模块的值做修改时会影响另一个模块。
· 当使用require命令加载某个模块时,就会运行整个模块的代码。
· 当使用require命令加载同一个模块时,不会再执行该模块,而是取到缓存之中的值。也就是说,CommonJS模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就返回第一次运行的结果,除非手动清除系统缓存。
· 运行时加载

ES6

· ES6模块中的导入导出值属于【动态只读引用】。
· 对于只读来说,即不允许修改引入变量的值,import的变量是只读的,不论是基本数据类型还是复杂数据类型。当模块遇到import命令时,就会生成一个只读引用。等到脚本真正执行时,再根据这个只读引用,到被加载的那个模块里面去取值。
· 对于动态来说,原始值发生变化,import加载的值也会发生变化。不论是基本数据类型还是复杂数据类型。
· 编译时输出接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值