Node 【切换commonjs模块和esm模块】【配置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.mjs

export default {name:"text"}

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

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

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

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

// commonjs.cjs

modulex.exports = {
	name:"commonjs"
}

esm规范中直接使用require引入

// index.js

const 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"
  },
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯一样的MEI男子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值