简明 ES6 模块

简明 ES6 模块

1.什么是模块

模块就是一段代码,这段代码可以反复使用,经常单独写成一个文件,一旦加载会立即执行。

2.导出

导出有 2 种方式:命名导出和默认导出,分别用关键字exportexport 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.注意事项

  • 直接使用模块语法在浏览器中可能无效,需要 babel 等工具转为可接受的语法
  • 导出的 2 种方式 export 和 export default 在一个文件中最好用一种,尽量少混用
  • 在 ES6 模块中,default 是一个关键字,不要使用 default 作为 as 的重命名名称
  • import 后,import 的模块将会被提升,放置于当前代码的最前端。因此,何处导入模块并不重要。
  • import 应该是单独的一条语句,不能在其他语句中运行该语句。以下 example.js 中的操作将导致错误。
  • 导入的只是当初模块的只读视图,这意味着操作的模块中的变量都存储在模块的内部
-----example.js------
if(xxx){
import example from "mock"
}

6.实例

【实例 1】链接信息

-----mock.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】工具类

【。。。待填坑】

【实例 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)});

原文地址:https://www.cnblogs.com/yejingping/p/10207345.html

时间: 2024-11-12 01:30:10

简明 ES6 模块的相关文章

面向未来的 ES6 模块标准

既然模块化已经越来越重要,那么从语言层面上直接去解决这个问题就显得很有必要(况且其他语言早就有了).于是 ES6 直接在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案. 设计思想 简单来说,ES6 模块的设计思想就是:一个 JS 文件就代表一个 JS 模块.在模块中你可以使用 import 和 export 关键字来导入或导出模块中的东西. ES6 模块主要具备以下几个基本特点: 自动开启严格模式,即使

ES6模块的import和export用法总结

ES6之前以前出现了js模块加载的方案,最主要的是CommonJS和AMD规范.commonjs前者主要应用于服务器,实现同步加载,如nodejs.AMD规范应用于浏览器,如requirejs,为异步加载.同时还有CMD规范,为同步加载方案如seaJS. ES6在语言规格的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案. ES6模块主要有两个功能:export和import export用于对外输出本模块(一个文件

Es6模块语法

/** * Created by Administrator on 2017/4/15. */ /*---------------------export命令---------------------*/ //Es6 的模块加载 //defer是"渲染完再执行",async是"下载完就执行". //浏览器对于带有type="module"的<script>,是异步加载,等同于打开了<script>标签的defer属性. /

ES6模块的import和export用法

ES6之前已经出现了js模块加载的方案,最主要的是CommonJS和AMD规范.commonjs主要应用于服务器,实现同步加载,如nodejs.AMD规范应用于浏览器,如requirejs,为异步加载.同时还有CMD规范,为同步加载方案如seaJS. ES6在语言规格的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案. ES6模块主要有两个功能:export和import export用于对外输出本模块(一个文件可以

es6模块 nodejs模块和 typescript模块

es6模块 import和export nodejs模块 require和module.exports typescript模块 module和export 原文地址:https://www.cnblogs.com/mttcug/p/8120274.html

commonjs模块和es6模块的区别?

commonjs模块和es6模块最主要的区别:commonjs模块是拷贝,es6模块是引用,但理解这些,先得理解对象复制的问题,在回过头来理解这两模块的区别. 一.基本数据类型的模块 ./a1.js es6模块 export var a1 = 1; setTimeout(() => a1 = 2, 500); ./a2.js commojs模块 var a2 = 2; module.exports = a2; setTimeout(() => a2 = 3 ,500); ./index.js

ES6 模块与 CommonJS 模块的差异

ES6 模块与 CommonJS 模块的差异 区别 CommonJS 模块 ES6 模块 原因 起作用的时机 CommonJS 模块是运行时加载(运行时) ES6 模块是编译时输出接口(编译时) CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成.而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成. 模块输出 CommonJS 模块输出的是一个值的拷贝 ES6 模块输出的是值的引用 出处:http://es6.

如何让 node 运行 es6 模块文件,及其原理

如何让 node 运行 es6 模块文件,及其原理 最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机制.而现在我们很多项目都是用 es6 的模块化规范来写代码的,包括 node 项目,所以,node 不能运行 es6 模块文件就会很不便. 让 node 运行 es6 模块文件的方式有两种: 转码 es6 模块为 commonjs 模块 hook node 的 require 机制,直接让 node

ES6模块之export和import教程

一.ES6中的模块ES6中的模块即使一个包含JS代码的文件,在这个模块中所有的变量都是对其他模块不可见的,除非我们导出它.ES6的模块系统大致分为导出(export)和导入(import)两个模块. 二.导入的具体使用 场景1:只想导入源模块的部分内容假设a.js是以如下方式导出的 // a.js export var num = 100 export var name = '王小明' 那么如果我们只需要a模块的num,就应该按下面的方式导入它 // b.js import {num} from