首页 > 其他分享 >第137篇:重学ES6模块化

第137篇:重学ES6模块化

时间:2023-04-13 23:13:17浏览次数:45  
标签:ES6 重学 console add 137 模块 mjs export moduleA

好家伙,

 

我原本以为学完模块化之后,就能非常顺利的完成我的项目分包,

然而并没有,这是非常重要的知识,而我没有学好

所以我决定重学一遍

 

本篇为《阮一峰 ECMAScript 6 (ES6) 标准入门教程 第三版》第23章"Module的语法"学习笔记

 

 

1.概述

历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。

 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。

ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。

 

 

2.模块的整体加载

可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。

//moduleA.mjs
function add(a) {
    return a + 2;
}

function multi(a) {
    return a * 2;
}

export {
    add,
    multi,
};

 

//moduleB.mjs
import * as module from "./moduleA.mjs"

console.log(module.add(2))
console.log(module.multi(3))

测试运行:

 

 模块整体加载所在的那个对象,应该是可以静态分析的,所以不允许运行时改变。

 

3.export default命令

从前面的例子可以看出,使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。

但是,用户肯定希望快速上手,未必愿意阅读文档,去了解模块有哪些属性和方法。

首先我们定义一个匿名函数在moduleA.mjs中

//moduleA.mjs
export default function (a) {
    return a + 2;
}

moduleA.mjs
在moduleB.mjs文件中

//moduleB.mjs
import add from "./moduleA.mjs";

console.log(add(2))

 

上面代码moduleA.mjs的默认输出是一个函数。

其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。

 (就是说,在这个例子中,我们把moduleA.mjs当作开发者,把moduleB.mjs当作使用者

对于开发者而言,开发者将模块导出后,使用者是不知道方法名字的

而默认导出,将方法的命名权给了使用者,这确实是非常人性化的设计)

 

即使定义了方法名,在导入时也能重新命名

//moduleA.mjs
export default function add(a) {
    return a + 2;
}

 

//moduleB.mjs
import adddd from "./moduleA.mjs";

console.log(adddd(2))

// 4

 

 

4.跨模块常量

 目录结构如下:

 

如果想设置跨模块的常量(即跨多个文件),或者说一个值要被多个模块共享,可以采用下面的写法。

// constants/db.mjs
export const db = {
    url: 'http://my.couchdbserver.local:5984',
    admin_username: 'admin',
    admin_password: 'admin password'
  };

 

// constants/users.mjs
export const users = ['root', 'admin', 'staff', 'ceo', 'chief', 'moderator'];

 

// constants/index.mjs
export {db} from './db.mjs';
export {users} from './users.mjs';

 

//moduleB.mjs
import {db, users} from './constants/index.mjs';

console.log(db)
console.log(users)

 

运行结果如下:

 

 (我想我的飞机大战中的配置项config.js可以这么搞)

 

标签:ES6,重学,console,add,137,模块,mjs,export,moduleA
From: https://www.cnblogs.com/FatTiger4399/p/17316017.html

相关文章

  • UVa 11375 Matches (DP&高精度)
    11375-MatchesTimelimit:2.000secondshttp://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2370Wecanmakedigitswithmatchesasshownbelow:Given N matches,findthenumberofdifferentnumbersrepresentableusing......
  • 3599元起 铭凡推出NPB7迷你主机:i7-13700H、双雷电4
    快科技4月11日消息,铭凡推出了新款迷你主机NPB7,搭载酷睿i7-13700H处理器,准系统售价3599元。新款迷你主机沿用了上一代的设计,采用银白配色,看起来十分整洁,其采用全新主动式SSD散热设计,侧面有散热口,可以有效对内存和SSD散热。处理器为酷睿i7-13700H,14核心20线程,L3缓存为24MB,P-Core......
  • 重学Java设计模式-行为型模式-责任链模式
    重学Java设计模式-行为型模式-责任链模式内容摘自:https://bugstack.cn/md/develop/design-pattern/2020-06-18-重学Java设计模式《实战责任链模式》.html#重学-java-设计模式-实战责任链模式「模拟618电商大促期间-项目上线流程多级负责人审批场景」责任链模式介绍图片来自......
  • JavaScript ES6中class的用法
    实例代码如下classPerson{constructor(name){if(!arguments.length){console.log("我是个人")}else{console.log(`我是${name}`)}}......
  • Vue进阶(四十五):精解 ES6 Promise 用法
    一、前言复杂难懂概念先不讲,我们先简单粗暴地把Promise用一下,有个直观感受。那么第一个问题来了,Promise是什么呢?是类?对象?数组?函数?别猜了,console.dir(Promise)直接打印出来看看。这么一看就明白了,Promise是一个构造函数,自己身上有all、reject、resolve这几个眼熟的方法,原型上有th......
  • ES6 => map、filter方法的区别
    letdataArr=[{name:450200000,code:1},{name:450300000,code:2}....] map:会返回执行map方法的数组(dataArr),的所有项(条件不成立也会返回undefined),可以只返回项中的某一参数 filter:会返回执行filter方法的数组(dataArr),条件成立的项,会返回整个遍历的项(不能只返回项中的某一......
  • ES6中一些方便的数组方法和对象方法
    //一共七个方法,其实,都是带有遍历性质的方法参考https://blog.csdn.net/PeaYing/article/details/100175757......
  • 前端科普系列(4):Babel —— 把 ES6 送上天的通天塔
    作者:Morrain 一、前言在上一节《CommonJS:不是前端却革命了前端》中,我们聊到了ES6Module,它是ES6中对模块的规范,ES6是ECMAScript6.0的简称,泛指JavaScript语言的下一代标准,它的第一个版本ES2015已经在2015年6月正式发布,本文中提到的ES6包括ES2015、ES2016、ES201......
  • 系统化学习前端之JavaScript(ES6:异步编程)
    前言JavaScript异步编程这块东西比较多,涉及到宏任务和微任务,所以单开一个篇幅梳理一下。同步和异步同步和异步是一种宏观概念,具体表现在JavaScript中,是同步任务和异步任务,即同步函数和异步函数。同步同步指函数在JavaScript同步执行。同步函数执行过程:A函数进入函数调......
  • 51nod 1370 排列与操作
    1370 排列与操作题目来源: TopCoder基准时间限制:2 秒空间限制:131072 KB分值: 320 难度:7级算法题 收藏 关注给定N长排列P,其中排列指数集{1,2,3...N}组成的一个序列,序列中每个元素恰好出现一次。初始时这个排列是给出的。之......