Node-CJS和ESM混合开发

news/2024/11/30 20:41:10/

Node — CJS和ESM混合开发

在JavaScript中,有两种主要的模块系统:CommonJSES Modules(ESM)
CJS通过require引入,module.exports导出
ESM通过import引入,export导出

判断JS使用CJS还是ESM

  • .cjs后缀的文件是使用CommonJS规范
  • .mjs后缀的文件是使用ES Modules规范。
  • .js后缀则以package.json中的type字段为准。

package.json 中的 type 字段用来指定包的类型,默认为commonjs

  • “commonjs”: 表示该包是一个 CommonJS 模块(即 Node.js 默认的模块格式)。
  • “module”: 表示该包是一个 ES 模块(即标准的 ECMAScript 模块格式)。
  • “json”: 表示该包仅包含 JSON 数据,可以通过 require() 函数或 ES6 的 import 语句来导入。

为什么需要混合开发?

很简单,比如当前js中需要引入多个库,A库的语法是CJS,B库的语法是ESM,因此需要实现混合开发。

CJS兼容ESM

(async function() {const esm = await import('esm');esm.a();esm.b();
})();

ESM兼容CJS(推荐)

ESM可以直接importCJS模块,越来越多的库使用ESM,建议新项目优先使用ESM规范。

import { a, b } from 'cjs';
a();
b():

dirname-filename-esm库

ESM中没有注入__dirname、__filename全局变量,可以通过dirname-filename-esm库获取

  • __dirname:当前文件所在目录的绝对路径,不包括当前文件名
import { dirname } from 'dirname-filename-esm'// 拿到当前文件所在目录的绝对路径
const __dirname = dirname(import.meta)
console.log(__dirname)
  • __filename:当前文件的绝对路径
import { filename } from 'dirname-filename-esm'
// 获取文件绝对路径
const __filename = filename(import.meta)// 手动实现
// import { fileURLToPath } from 'node:url'
// const __filename = fileURLToPath(import.meta.url)

http://www.ppmy.cn/news/39069.html

相关文章

超级进化吧switch case in java

switch case的进化历程🚐简介区别Java 6及以下 | 整数当道Java 7 | String来贺Java 8 | 常量不够, 表达式来凑Java 12 | ->替: yield能返回Java 14 | ->凑多值,转型在心中转型Java 15 | 哎呦喂,都能定义变量了Java 17 | 整数不够, 长整型来凑总结因为长情是古…

【消息队列】聊一下如何避免消息的重复消费

什么是重复消费 一条消息在传输过程中,为了保证消息的不丢失,可能会多少量的消息进行重试,这样就可能导致Broker接受到的消息出现重复,如果说下游系统没有针对业务上的处理,那么可能导致同一笔借款或者支付订单出现重…

【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】

【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】1、概述2、 自己的学习与摸索之路第一阶段:随意在网上查找相关资料第二阶段:针对性在网上资料第三阶段:测试并且使用开发板第四阶段:针对性使用工具进行测试。2、…

操作系统-内存管理

一、总论 1.1 硬件术语 ​ 为了不让读者懵逼(主要是我自己也懵逼),所以特地整理一下在后面会用到术语。 ​ 我们电脑上有个东西叫做内存,他的大小比较小,像我的电脑就是 16 GB 的。它是由 ROM 和 RAM 组成的&#x…

(5)(5.9) 推力损失和偏航不平衡警告

文章目录 前言 1 潜在的推力损失 2 偏航不平衡 前言 如果你看到推力损失或偏航不平衡的警告,这个页面概述了一些应该做的检查和修改来解决这个问题。在大多数情况下,这些警告是由于错误的硬件选择或设置造成的。 这些警告是为了检测推进系统的硬件故…

【C语言】预处理和程序环境

目录 程序的环境 运行环境 翻译环境 编译的过程 预编译阶段 编译阶段 汇编阶段 链接阶段(不属于编译阶段) 预处理详解 预定义符号 #define #define定义标识符 #define定义宏 #define的替换规则 #和##的使用 带副作用的宏参数 宏和…

二叉树的5个性质【要点:完全二叉树的性质】

只讲不会的 普通二叉树就要讲排列顺序了!!! 预备:满二叉树:1.前提是它必须是二叉树 2.每个结点(除了终端结点外)都是2个子女。 要点1:关于普通的树的结点的计算&#xff0…

Transformer 笔记目录

一、介绍 导论:Transformer 背景介绍,Transformer 能胜任的任务介绍。相关知识:深度学习基础(神经网络,回归,分类,优化,激活函数等),具体介绍序列到序列模型…