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

server/2024/9/24 11:26:53/

文章目录

  • 前言
  • 一、在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/server/36814.html

相关文章

C语言——每日一题(轮转数组)

一.前言 前不久学习了时间复杂度的概念,便在力扣上刷了一道需要参考时间复杂度的题——轮转数组 https://leetcode.cn/problems/rotate-array/submissions这道题不能使用暴力算法,因为这道题对时间复杂度的要求不能为O(N^2)。因…

【负载均衡在线OJ项目日记】项目简介

目录 前言 什么是负载均衡 所用的技术和开发环境 所用技术 开发环境 项目的宏观结构 leetcode 结构 结构 编写思路 前言 从C语言的文章到现在Linux网络部分,我已经涉猎了很多知识;终于在今天我要开始搞项目了,通过项目我也可以开始…

【设计模式】17、iterator 迭代器模式

文章目录 十七、iterator 迭代器模式17.1 user_slice17.1.1 collection_test.go17.1.2 collection.go17.1.3 iterator.go17.1.4 user.go 17.2 book_shelf17.2.1 book_shelf_test.go17.2.2 book_shelf.go17.2.3 iterator.go17.2.4 book.go 十七、iterator 迭代器模式 https://r…

C语言双向链表

前面我们已经学完了单链表的知识点(如果还没有看过的主页有哦~),这篇博客我们就来探讨探讨单链表的孪生弟弟——双向链表。 目录 1.链表的分类 2.双向链表的结构 3.双向链表的实现 3.1 List.h 3.2 List.c 4.书写要点总结说明 4.1为什…

XSS攻击分析---(原理、危害、防御、应急响应)

1、攻击原理 造成XSS漏洞的原因就是,对攻击者的输入没有经过严格的控制,使得攻击者通过巧妙的方法注入恶意指令代码到网页,进行加载并执行。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java, VBScript&…

数据可视化准备:动态识别echarts的横纵坐标数据字段

前言 继上一篇文章 自动选择图表类型:基于数据特征智能决策 分析了如何根据sql和数据结果判断应该自动使用哪种图表类型,本文继续将图表的x轴和y轴横纵坐标识别出来,基本一个二维数据类普通图表就可以直接输出为echarts参数了。 在数据可视…

Android 桌面小组件 AppWidgetProvider

Android 桌面小组件 AppWidgetProvider 简介 小组件就是可以添加到手机桌面的窗口。点击窗口可以进入应用或者进入应用的某一个页面。 widget 组件 如需创建 widget,您需要以下基本组件: AppWidgetProviderInfo 对象 描述 widget 的元数据&#xff0…

解决连接不上VPN问题

解决连接不上VPN问题 错误描述:错误描述: 错误描述: 无法建立计算机与VPN服务器之间的网络连接,因为远程服务器未响应。这可能是因为未将计算机与远程服务器之间的某种网络设备(如防火墙、NAT、路由器等)配…