[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的更多相关文章

  1. 彻底掌握 Commonjs 和 Es Module

    目录 Commonjs commonjs 实现原理 require 文件加载流程 require 模块引入与处理 require 加载原理 require 避免重复加载 require 避免循环引用 ...

  2. UMD、CommonJS、ES Module、AMD、CMD模块的写法

    AMD异步模块规范 RequireJS就是AMD的一个典型的实现. 以下是一个只依赖与jQuery的模块代码: // foo.js define(['jquery'], function($){ // ...

  3. JS JavaScript模块化(ES Module/CommonJS/AMD/CMD)

    前言 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了, jQuery,Ajax,Node.Js,MVC,MVVM等的助力也使得 ...

  4. 深入 CommonJs 与 ES6 Module

    目前主流的模块规范 UMD CommonJs es6 module umd 模块(通用模块) (function (global, factory) { typeof exports === 'obj ...

  5. OpenGL ES 3.0 帧缓冲区对象基础知识

    最近在帧缓冲区对象这里卡了一下,不过前面已经了解了相关的OpenGL ES的知识,现在再去了解就感觉轻松多了.现在就进行总结. 基础知识 我们知道,在应用程序调用任何的OpenGL ES命令之前,需要 ...

  6. elastic search&logstash&kibana 学习历程(二)es基础知识

    简介:es的index索引,document文档对象,副本,多节点集群等基础知识 1.通俗的解释: 在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中 ...

  7. es 模块的基础知识,深度了解

    // 一模块的基础知识 /** * export :用于模块输出的出口 * import :文件引入的入口 */ // 1,第一种方式使用export方式输出 var a = 'a'; var b = ...

  8. ElasticSearch(四):关于es的一些基础知识讲解

    上一篇博客更新完之后,我发现一个问题:在我创建索引的时候依旧无法准确的理解每个字段的意义,所以就有了这个. 1. 关于索引 1.1 关于索引的一些基础知识 在创建标准化索引的时候,我们传入的请求体如下 ...

  9. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  10. android图形基础知识

    Android核心分析(23)-----Andoird GDI之基本原理及其总体框架 2010-06-13 22:49 18223人阅读 评论(18) 收藏 举报 AndroidGDI基本框架 在An ...

随机推荐

  1. 基于知识图谱的《红楼梦》人物关系可视化及问答系统(含码源):命名实体识别、关系识别、LTP简单教学

    基于知识图谱的<红楼梦>人物关系可视化及问答系统(含码源):命名实体识别.关系识别.LTP简单教学 文件树: app.py是整个系统的主入口 templates文件夹是HTML的页面 |- ...

  2. 6.7 Windows驱动开发:内核枚举LoadImage映像回调

    在笔者之前的文章<内核特征码搜索函数封装>中我们封装实现了特征码定位功能,本章将继续使用该功能,本次我们需要枚举内核LoadImage映像回调,在Win64环境下我们可以设置一个LoadI ...

  3. 20.5 OpenSSL 套接字RSA加密传输

    RSA算法同样可以用于加密传输,但此类加密算法虽然非常安全,但通常不会用于大量的数据传输,这是因为RSA算法加解密过程涉及大量的数学运算,尤其是模幂运算(即计算大数的幂模运算),这些运算对于计算机而言 ...

  4. 最新版Emlog采集发布插件-免费下载

    推荐一款可以自动采集网页文章数据,并发布到Emlog网站的Emlog采集发布插件(兼容最新的Emlog Pro版本,也兼容之前的 Emlog 5.3 和 Emlog 6.0 版本),支持对接简数采集器 ...

  5. 小知识:统计Oracle的日归档量

    首先这对于Oracle DBA来说是个初级问题,即使不熟悉的初级DBA也可以快速在网上搜索到现成的SQL语句. 网上搜到的查询SQL基本类似这样的逻辑: select trunc(completion ...

  6. Python数组合并和数组分割(数组拆分)

    数组的合并和拆分 ## 将数组按照固定长度进行拆分,返回一个二维数组 def list_split(source_list, n): return [source_list[i:i+n] for i ...

  7. ABC 305

    题目列表 前三题过水,第四题分类讨论两个端点之间的距离和所在位置是清醒或睡眠 即可. E 题意:一张图上有一些结点有保安,每个保安有不同的警戒度 \(h_i\),定义 一个结点是安全的 为这个结点可以 ...

  8. 提升正则读写效率,超好用的正则图解工具Regulex与在线调试工具regexr

    壹 ❀ 引 正则表达式可以说是不少开发者心中的一根刺,平时使用场景好像也不多,但一旦要用写起来又有些头疼.抱着长痛不如短痛的想法,我曾在2019年年末,花了半个月时间完整读完了老姚的正则迷你书,并在博 ...

  9. NC17247 H、Diff-prime Pairs

    题目链接 题目 题目描述 Eddy has solved lots of problem involving calculating the number of coprime pairs withi ...

  10. 使用yum 报错 :This system is not registered with RHN

    解决办法:(假定你已安装yum,且网络畅通)更改yum的源, 即更换/etc/yum.repos.d/rhel-debuginfo.repo 这个文件.首先备份,如下所示: [root@localho ...