《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) 开始默认支持

值得学习的参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值