[VueJsDev] 基础知识 - CommonJs VS ES Module
[VueJsDev] 目录列表
https://www.cnblogs.com/pengchenggang/p/17037320.html
CommonJs VS ES Module
::: details 目录
:::
这里的环境是指在 Node.js 下,有两种模块系统规范。简单来说就是导入导出的规范。两种规范语法不同。
CommonJS 是由 Mozilla 的工程师 Kevin Dangoor 于 2009 年 8 月改名的,原项目叫做 ServerJS,是在 2009 年 1 月创建的。
ES Module 简称 ESM,ESM 是 ES6 开发的规范。ES6 于 2015 年 6 月正式发布,ES Module 于 2019 年 5 月 21 日被 Firefox 67+,Safari 11.1+,Chrome 63+支持。这里的 ES = ECMAScript。
| 模块系统规范 | 发布年份 |
|---|---|
| CommonJS | 2009 年 |
| ES Module | 2015 年 |
::: tip
vue 开发用的是 ES Module 规范。
node.js 默认是 CommonJS,如果要修改的话,需要在 package.json 的 type: "module",就是用 ES Module 了。
:::
常见规范有 AMD、CMD、UMD、CommonJS、ES Module
Node.js 开始是用的 CommonJs
Node.js 从 v13.2.0 之后也引入了规范的 ES Modules 机制
Part. 1: CommonJs
CommonJs 官网 https://www.commonjs.org/
这里都是最常用的方法,用多少写多少。
导出用法
// 导出方法1
exports.a = 1
exports.b = 2
exports.c = () => a + b
// 导出方法2
module.exports = {
a,
b,
c,
}
// 方法1 和 方法2 不能同时使用,因为指针会被覆盖
导出原理
// 其实就是外层套了一个函数 两个入参
function (module, exports) {
// 所以你可以对 module.exports 赋值
// 还可以对 exports.属性 赋值
// 原理就是 入参不能被赋值,但是它的属性你可以赋值
}
导入用法
const { a, b, c } = require("./abc.js")
const aaa = require("./abc.js")
Part. 2: ES Module
ES Module 脚本扩展名是 .mjs,如果要改成.js,需要在 package.json 的 type: "module"。
导出
// 导出单个对象
export let abc = "abc"
export const func = () => {}
// 导出默认对象
const abc = { a, b, c }
export default abc
导入
// 静态导入 最常用
import obj from "abc"
import { bcd } from "abc"
import obj from "./abc"
// 动态导入 import() 是 promise
;(async function () {
const { abc } = await import("./yourjs.mjs")
})()
import("./yourjs.mjs").then(res => {
console.info("res.abc", res.abc)
})
Part. 3: CJS 对比 ESM 表
vue.config.js 用的是 CJS,但是 vue 开发里面的代码都是用的 ESM。
|
-
|
CommonJS | ES Module |
|---|---|---|
| 年份 | 2009 年 | 2015 年 |
| 导出单属性 | exports.a = 1; |
export let abc = 'abc'; |
| 导出 Default | module.exports = abc; |
export default abc; |
| 导入-静态 | - | import obj from 'abc'; |
| 导入-动态 | const {a, b, c} = require('./abc.js'); |
import('./yourjs.mjs') promise |
| 默认扩展名 | .js | .mjs |
Code. 4: 获取文件路径
默认是 当前目录 + 文件相对路径,这个默认不对,应该是 文件当前目录 + 文件相对路径。
- CommonJS 代码
const path = require("path")
const resolve = dir => path.join(__dirname, dir)
const path = resolve("aaa/data.json")
- ES Module 代码
import { readFileSync } from "fs"
import { fileURLToPath } from "url"
import { dirname, resolve } from "path"
const __dirname = dirname(fileURLToPath(import.meta.url))
const path = resolve(__dirname, "corpus/data.json")
const data = readFileSync(path, { encoding: "utf-8" }) // 赠送个读取文件函数
[VueJsDev] 基础知识 - CommonJs VS ES Module的更多相关文章
- 彻底掌握 Commonjs 和 Es Module
目录 Commonjs commonjs 实现原理 require 文件加载流程 require 模块引入与处理 require 加载原理 require 避免重复加载 require 避免循环引用 ...
- UMD、CommonJS、ES Module、AMD、CMD模块的写法
AMD异步模块规范 RequireJS就是AMD的一个典型的实现. 以下是一个只依赖与jQuery的模块代码: // foo.js define(['jquery'], function($){ // ...
- JS JavaScript模块化(ES Module/CommonJS/AMD/CMD)
前言 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了, jQuery,Ajax,Node.Js,MVC,MVVM等的助力也使得 ...
- 深入 CommonJs 与 ES6 Module
目前主流的模块规范 UMD CommonJs es6 module umd 模块(通用模块) (function (global, factory) { typeof exports === 'obj ...
- OpenGL ES 3.0 帧缓冲区对象基础知识
最近在帧缓冲区对象这里卡了一下,不过前面已经了解了相关的OpenGL ES的知识,现在再去了解就感觉轻松多了.现在就进行总结. 基础知识 我们知道,在应用程序调用任何的OpenGL ES命令之前,需要 ...
- elastic search&logstash&kibana 学习历程(二)es基础知识
简介:es的index索引,document文档对象,副本,多节点集群等基础知识 1.通俗的解释: 在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中 ...
- es 模块的基础知识,深度了解
// 一模块的基础知识 /** * export :用于模块输出的出口 * import :文件引入的入口 */ // 1,第一种方式使用export方式输出 var a = 'a'; var b = ...
- ElasticSearch(四):关于es的一些基础知识讲解
上一篇博客更新完之后,我发现一个问题:在我创建索引的时候依旧无法准确的理解每个字段的意义,所以就有了这个. 1. 关于索引 1.1 关于索引的一些基础知识 在创建标准化索引的时候,我们传入的请求体如下 ...
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- android图形基础知识
Android核心分析(23)-----Andoird GDI之基本原理及其总体框架 2010-06-13 22:49 18223人阅读 评论(18) 收藏 举报 AndroidGDI基本框架 在An ...
随机推荐
- C/C++ Qt 使用JSON解析库 [修改篇]
JSON是一种轻量级的数据交换格式,它是基于ECMAScript的一个子集,使用完全独立于编程语言的文本格式来存储和表示数据,简洁清晰的的层次结构使得JSON成为理想的数据交换语言,Qt库为JSON的 ...
- ElasticSearch-聚合、自动补全、集群、数据同步
数据聚合 1.数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计.分析.运算.例如: 什么品牌的手机最受欢迎? 这些手机的平均价格.最高价格.最低价格? 这些手机每月的销售 ...
- SpringCloud-06-Consul注册中心
Consul Server Consul 是由 HashiCorp 基于 Go 语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务软件. 用于实现分布式系统的服务发现与配置. 使用起来也较 ...
- Docker从认识到实践再到底层原理(七)|Docker存储卷
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...
- 使用DoraCloud搭建支持统信UOS桌面的信创云桌面系统
信创云桌面 信创云桌面采用国产的芯片,支持国产的桌面操作系统.本方案采用海光CPU的服务器,运行DoraCloud云桌面系统.可以支持统信UOS桌面系统和麒麟桌面操作系统. 环境准备 服务器:海光 5 ...
- Java - CodeForces - 469C
题目: 现在有一个容器,里面有n个物品,编号为1-n,现在小q可以进行一些操作,每次取出任意两个数,可以把这两个数的编号相加,相减,相乘,再把结果放回容器.问最后小q能否在n-1次操作后使得容器里的唯 ...
- ZR 七连 Day 1 游记
ZR 七连 Day 1 游记 游记篇 赛前搞笑事件 今天是第一场正睿,还是要 好好对待 的 $ 17:59:58 $ 还在吃饭 $ 17:59:59 $ 做出重要决定,先打着比赛,有空就吃一口包子 $ ...
- 覆盖第三方jar包中的某一个类。妙!!
在我们日常的开发中,经常需要使用第三方的jar包,但是很多时候总是会发现第三方的jar包中的某一个类,有问题,但是又无法继承,因为你继承后 变成了你自己的,jar包中 调用的 还是 他自己内部包含的, ...
- HBase-表的压缩
一.如何选择压缩算法以及Data_Block_Encoding?(1)如果Key很长,或者有很多Column,那么推荐使用FAST_DIFF.(2)如果数据是冷数据,不经常被访问,那么使用GZIP压缩 ...
- UVALive7146 Defeat the Enemy
题目链接 题目 见链接. 题解 知识点:贪心,STL. 首先要保证我方军队能消灭对方军队才行,因此只要我们按攻击力从大到小排,对方按防御力从大到小排,从大到小遍历,用我方所有攻击力大于敌方目前防御力军 ...