Node 【切换commonjs模块和esm模块】【配置esm模块规范的坑】

ops/2025/1/15 21:49:46/

文章目录

  • 前言
  • 一、在commonjs规范中使用esm模块
  • 二、在esm规范中使用commonjs模块
  • 三、在node中使用esm规范的坑


前言

node有两种模块规范

  • 一种是以export导出,import引入的esm模块规范。即.js文件会被视为es6模块,采取解析
  • 一种是以module.exports导出,require引入的CommonJS规范。即.js文件会被视为commonjs模块采取解析

node默认使用commonjs规范,但是可以通过修改package.json中的type修改node使用的规范

/// package.json# module 为esm规范 commonjs 为common.js规范"type":"module" | "commonjs"

但是,通过修改文件后缀,node可以在commonjs规范时也可以引入esm模块,在esm规范中也可以引入commonjs模块


一、在commonjs规范中使用esm模块

通过将模块文件后缀定义为.mjs表明为一个esm模块

// module.mjsexport default {name:"text"}

在commonjs规范中直接使用import引入

// index.js
import esm from "/module.mjs"

二、在esm规范中使用commonjs模块

通过将模块文件后缀定义为.cjs表明为一个commonjs模块

// commonjs.cjsmodulex.exports = {name:"commonjs"
}

esm规范中直接使用require引入

// index.jsconst commonModule = require("./commonjs.cjs")

三、在node中使用esm规范的坑

package.json中的type设置为module之后,node默认使用esm规范,但此时省略文件后缀引入模块,会报错!

# error:Did you mean to import "./test.js"?import test from "./test" 

需要显示申明文件后缀

import test from "./test.js" 

如果你每个文件都要申明的话,在启动项目时需要增加配置

 "scripts": {"dev": "node --es-module-specifier-mode=node ./main.js"},

http://www.ppmy.cn/ops/31055.html

相关文章

【软件工程】详细设计

目录 前言详细设计算法设计工具——判定表 前言 软件工程生命周期分为八个阶段: 问题定义—>可行性研究—>需求分析 —>概要设计—>详细设计—>编码与单元测试 —>综合测试—>软件维护 这节我们讲的是软件开发流程中的一个阶段,需求…

从零开始学AI绘画,万字Stable Diffusion终极教程(二)

【第2期】关键词 欢迎来到SD的终极教程,这是我们的第二节课 这套课程分为六节课,会系统性的介绍sd的全部功能,让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在第一节课里面,我们…

MyBatis 使用 XML 文件映射

在MyBatis中 我们可以使用各种注解来配置我们Mapper 类中的方法 我们为什么要使用XML文件呢? 如果我们是一条非常长的SQL 语句 使用 注解配置的话, 会非常不利于阅读 如下 所以,就需要使用到一个XML文件来对SQL语句进行映射,那么 …

华为平板手机如何清理应用市场的存储空间

如何清理应用市场的存储空间 适用产品: 手机,平板 适用版本:不涉及系统版本 如果您的应用市场显示应用的数据较大,可能是下载的安装包没有安装成功,导致安装包未自动删除。(可参考:应用市场下…

sql面试题

这里写目录标题 1.只保留学生的最新成绩 1.只保留学生的最新成绩 表student中记录学生的成绩信息, 要求只保留学生的最新一条成绩记录 传统方式: 根据学生编号进行group by, 找到最新的一条记录(编号、时间)根据编号和时间, 查询出记录的完整信息(id为2, 5, 6)删除其余记录…

redis集群的创建安装与配置,以及维护

一、redis集群配置 port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes 二、安装ruby(ruby可以充当redis客户端的角色) yum -y install ruby ruby-devel rubygems rpm-build gem install …

Mac远程桌面windows11

文章目录 一、Mac安装Microsoft Remote Desktop二、Window11打开远程登录权限三、常见问题 一、Mac安装Microsoft Remote Desktop 下载地址:点击这里官方下载 基本不用看,凭感觉用就行。搞不定详情见:官方说明 二、Window11打开远程登录权…

gateway中对返回的数据进行处理

gateway中对返回的数据进行处理 背景1.项目层次 背景 最近公司有个需求是对返回数据进行处理,比如进行数据脱敏。最后在gateway中进行处理。 1.项目层次 根据项目的结构,原本在菜单功能处有对于权限设计的url判断,所以在url后面加了一个正…