简明 ES6 模块
简明 ES6 模块
1.什么是模块
模块就是一段代码,这段代码可以反复使用,经常单独写成一个文件,一旦加载会立即执行。
2.导出
导出有 2 种方式:命名导出和默认导出,分别用关键字export和export default表示
2.1 命名导出:export 关键字
- 第一种方式:在要导出的代码前加上 export 关键字就可以了!
export var foo;
export let foo;
export const foo;
export function myFunc() {}
export function* myGenFunc() {}
export class MyClass {}
- 第二种方式:将要导出的对象放在
export {}的{}中
var foo1;
let foo2;
const foo3;
function myFunc() {}
class MyClass {}
export {foo1, foo2, foo3, myFunc, MyClass}
2.2 默认导出:export default 关键字
- 第一种方式:在要导出的函数或者类之前加 export default 关键字,其中名称可以省略。这将会使其具有匿名函数和匿名类的功能。
export default function myFunc() {}
export default function () {}
export default function* myGenFunc() {}
export default function* () {}
export default class MyClass {}
export default class {}
export default foo;
export default 'Hello world!';
export default 3 * 7;
export default (function () {});
- 第二种方式:用
export default moduleName关键字导出
=========================
var foo1;
export default foo1;
==========================
let foo2;
export default let foo2;
==========================
export function myFunc() {};
export default myFunc;
注意:使用命名导出时,一个 js 文件可以 export 多个模块;但是使用默认导出时,一个文件只能有一个模块导出,否则将会报错。
2.3 其他
2.3.1 重命名导出
export { MY_CONST as FOO, myFunc };
export { foo as default };
2.3.2 从其他模块导出
export * from 'src/other_module';
export { foo as myFoo, bar } from 'src/other_module';
export { default } from 'src/other_module';
export { default as foo } from 'src/other_module';
export { foo as default } from 'src/other_module'
3.导入
| 导入方式 | 语法 | 描述 |
|---|---|---|
| 默认导入 | import localName from 'src/my_lib'; |
- |
| 命名空间导入 | import * as my_lib from 'src/my_lib'; |
- |
| 命名导入 | import { name1, name2 } from 'src/my_lib'; |
- |
| 重命名导入 | import { name1 as localName1, name2 } from 'src/my_lib'; |
- |
| 空导入 | import 'src/my_lib'; |
仅加载模块,不导入任何内容 |
| 默认导入+命名空间 | import theDefault, * as my_lib from 'src/my_lib'; |
- |
| 默认导入+命名导入 | import theDefault, { name1, name2 } from 'src/my_lib'; |
- |
4.导出与导入之家的关联
- 使用命名导出时,应用
import {ModuleName}的方式导入;使用默认导出时,使用import moduleName的方式导入,无需加花括号。 - 导入的时候,我们可以只导入我们需要的模块,如以下。
------lib.js-----
export const PI = '3.14'
export let perimeter = radius => {
console.log('周长:', 2 * PI * radius)
}
-----main.js-----
import {perimeter} from 'lib'
perimeter(1);
5. 在 script 中使用模块
<!--加载一个js模块文件-->
<script type="module" src="module.js"></script>
<!-- 内联引入一个模块 -->
<script type="module">
import {sum} from './example.js';
let res = sum(1,2);
6.注意事项
- 直接使用模块语法在浏览器中可能无效,需要 babel 等工具转为可接受的语法
- 导出的 2 种方式 export 和 export default 在一个文件中最好用一种,尽量少混用
- 在 ES6 模块中,default 是一个关键字,不要使用 default 作为 as 的重命名名称
- import 后,import 的模块将会被提升,放置于当前代码的最前端。因此,何处导入模块并不重要。
- import 应该是单独的一条语句,不能在其他语句中运行该语句。以下 example.js 中的操作将导致错误。
- 导入的只是当初模块的只读视图,这意味着操作的模块中的变量都存储在模块的内部
-----example.js------
if(xxx){
import example from "mock"
}
7.实例
【实例 1】链接信息
-----api.js-----
export let linkInfo = [
{
name: '百度',
address: 'baidu.com'
},
{
name: '新浪',
address: 'sina.com'
},
{
name: '优酷',
address: 'youku.com'
}
]
-----main.js-----
import {linkInfo} from "mock"
console.log('链接信息:',JSON.stringify(linkInfo))
【实例 2】工具类
// 加解密算法
import CryptoJS from 'crypto-js';
function getPrivate() {
let result = 'abcdef';
for (let i = 0; i < 10; i++) {
result += i;
}
return result;
}
export function Encrypt(data) {
let src = CryptoJS.enc.Utf8.parse(data);
let encrypted = CryptoJS.AES.encrypt(src, CryptoJS.enc.Utf8.parse(getPrivate()), {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
}
export function Decrypt(data) {
let decrypt = CryptoJS.AES.decrypt(data, CryptoJS.enc.Utf8.parse(getPrivate()), {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var result = decrypt.toString(CryptoJS.enc.Utf8);
return result;
}
【实例 3】接口
-----api.js-----
export default {
addLink (link) {
let params = {
name: link.name,
address: link.address
}
return http
.post('/link/add', params)
.then(data => {
return Promise.resolve(data)
})
.catch(e => {
return Promise.reject(e)
})
},
updateLink (link) {
let params = {
id: link.id,
name: link.name,
address: link.address
}
return http
.post('/link/update', params)
.then(data => {
return Promise.resolve(data)
})
.catch(e => {
return Promise.reject(e)
})
},
getLinkList () {
let params = {
currentPage: 1,
pageSize: 20
}
return http
.post('/link/list', params)
.then(data => {
return Promise.resolve(data)
})
.catch(e => {
return Promise.reject(e)
})
},
deleteLink (link) {
let params = {
id: link.id
}
return http
.post('/link/delete', params)
.then(data => {
return Promise.resolve(data)
})
.catch(e => {
return Promise.reject(e)
})
}
}
-----main.js-----
import * as api from "./myLib";
api.addLink(myParams)
.then(res=>{console.log("well")})
.catch(e => {console.log(e)});
简明 ES6 模块的更多相关文章
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- ES6模块的import和export用法总结
ES6之前以前出现了js模块加载的方案,最主要的是CommonJS和AMD规范.commonjs前者主要应用于服务器,实现同步加载,如nodejs.AMD规范应用于浏览器,如requirejs,为异步 ...
- commonjs模块和es6模块的区别
commonjs模块与es6模块的区别 到目前为止,已经实习了3个月的时间了.最近在面试,在面试题里面有题目涉及到模块循环加载的知识.趁着这个机会,将commonjs模块与es6模块之间一些重要的的区 ...
- ES6模块之export和import详解
ES6中的模块即使一个包含JS代码的文件,在这个模块中所有的变量都是对其他模块不可见的,除非我们导出它.ES6的模块系统大致分为导出(export)和导入(import)两个模块. 1.模块导出(ex ...
- Webpack4教程:第一部分,入口、输入和ES6模块
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://wanago.io/2018/07/16/webpack-4-course-par ...
- ES6 模块机制
ES6 实现了模块功能 将文件当作独立的模块,一个文件一个模块 每个模块可以导出自己的API成员,也可以导入其他模块或者模块中特定的API ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模 ...
- Es6模块语法笔记
/** * Created by Administrator on 2017/4/15. */ /*---------------------export命令--------------------- ...
- ES6 模块与 CommonJS 模块的差异
ES6 模块与 CommonJS 模块完全不同.它们有两个重大差异 CommonJS 输出是值的拷贝,即原来模块中的值改变不会影响已经加载的该值,ES6静态分析,动态引用,输出的是值的引用,值改变,引 ...
- commonjs模块和es6模块的区别?
commonjs模块和es6模块最主要的区别:commonjs模块是拷贝,es6模块是引用,但理解这些,先得理解对象复制的问题,在回过头来理解这两模块的区别. 一.基本数据类型的模块 ./a1.js ...
随机推荐
- DevExpress 14.2 批量汉化
1.下载DevExpress_.NET_Localization_Resources_14.2汉化包 2.解压后将zh-CN或zh-CHS复制到安装目录如D:\Program Files (x86)\ ...
- 阿里巴巴国际站 网站和PC客户端都登录不了,其他电脑或手机可以
背景 昨天晚上,我还能打开阿里巴巴国际站,PC客户端也可以登录 今天早上起床打开电脑,发现国际站的网站打开不了,客户端也登录不了,提示了错误信息,但是其他电脑或手机就可以登录 原因分析 1.是不是本机 ...
- Web安全入门笔记-XSS
windows 10 360浏览器 0x00.概述 1.什么是 XSS Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使 ...
- 【Linux】Linux 在线安装yum
Linux如何安装软件? 一.RPM安装 优点: 安装过程很简单 缺点: 需要自己寻找和系统版本对应的RPM包 安装过程中需要解决包的依赖问题(例如tftp包) 二.yum在线安装 软件包仓库 仓库的 ...
- 一、选择与安装——Linux学习笔记
A)为什么要用Linux做服务器? 网络理由: 1.linux本身是网络操作系统,支持所有TCP/IP协议,网络功能是内核中六大模块之一 2.linux和unix兼容,unix是早期的服务器霸主,现在 ...
- Elasticsearch 5.1.1 head插件安装指南
一.下载安装包 下载Elasticsearch 5.1.1 下载地址:https://www.elastic.co/downloads/elasticsearch zip和tar格式是各种系统都通用的 ...
- HCNA配置手工负载分担模式链路聚合
一.配置手工负载分担模式链路聚合 链路聚合(Link Aggregation)是将—组物理接口捆绑在一起作为一个逻辑接口来增加带宽的一种方法,又称为多接口负载均衡组(Load Sharing Grou ...
- STM32-F429ZIT6-关于驱动安装
第一步:下载驱动 1.个人百度云链接:http://pan.baidu.com/s/1dE8vxy5 密码:yow0 2.网站下载:这个还是直接百度吧. 第二步:驱动安装 注意:安装之前要先关闭安全监 ...
- OC 方法声明使用
Person.h #import <Foundation/Foundation.h> @interface Person : NSObject { int _age; } - (void) ...
- lua 语句学习
就如同C里的if else,while,do,repeat.就看lua里怎么用: 1.首先看if else t = {1,2,3} local i = 1 if t[i] and t[i] % 2 = ...