《Vite 基础知识》关于 .mjs .cjs 文件引出 NodeJS 对JS模块加载的思考(CommonJS 和 ESM)

本文介绍了在从Webpack/Vue2升级到Vite/Vue3过程中遇到的三个主要差异:Vitepress的config.mjs、Vite/Vue3项目的postcss.config.cjs后缀要求和package.json的type属性。这些差异主要围绕Node.js的CommonJS和ESM模块加载方式展开。

前言

学习 Webpack/Vue2 升级 Vite/Vue3 时,发现以下不同:

  1. 新建的 Vitepress 项目默认创建了 config.mjs 文件;

  2. 新建的 Vite/Vue3 项目,package.json 中默认加上 type: 'module' 配置;

  3. 新建的 Vite/Vue3 项目,postcss.config.cjs 文件后缀必须是 .cjs,否则报错;

其实它们是一个问题,Node.js .js 文件的模块加载方式!

分析

先理清几个概念!!!

Node.js 的模块加载方法有两种:CommonJS ES Modules(ES6/ESM,接下来都用简称 ESM )

CommonJS 和 ESM 区别

功能 CommonJS ESM
导入/导出接口 require()exports/module.exports importexport
输出 值的拷贝 值的引用
动态导入 不支持 支持
作用域 全局作用域 局部作用域
加载 运行时加载 编译时输出接口
同步/异步 require() 是同步加载模块 import 命令是异步加载模块
循环依赖 程序复杂时容易崩溃 可处理循环依赖,因为是静态作用域
浏览器兼容 支持现代浏览器,旧版不支持 更适用于早期 Node.js 环境
Node.js 支持 Node.js打包 JS 代码的原始方式 v8.5.0(2017.9.12) 开始支持
v13.2.0(2019.11.21) 开始默认支持

值得学习的参考链接

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值