webpack 之(6) commonJS和 ES6 Module区别 (未完成)
模块定义和使用
在commonjs中,一个文件就是一个模块.定义一个模块导出通过exports 或者 module.exports挂载即可
exports.count = 1;
导入一个模块
const {resolve} = require('path')
CommonJS的模块主要由原生module来实现,这个类上的属性对我们理解模块机制很重要
Module { id: '.', // 如果是 mainModule id 固定为 '.',如果不是则为模块绝对路径 exports: {}, // 模块最终 exports filename: '/absolute/path/to/entry.js', // 当前模块的绝对路径 loaded: false, // 模块是否已加载完毕 children: [], // 被该模块引用的模块 parent: '', // 第一个引用该模块的模块 paths: [ // 模块的搜索路径 '/absolute/path/to/node_modules', '/absolute/path/node_modules', '/absolute/node_modules', '/node_modules' ]
小结:
CommonJS
模块加载过程是同步阻塞性地加载,在模块代码被运行前就已经写入了 cache
,同一个模块被多次 require
时只会执行一次,重复的 require
得到的是相同的 exports
引用。
值得留意:cache key
使用的是模块在系统中的绝对位置,由于模块调用位置的不同,相同的 require('foo')
代码并不能保证返回的是统一个对象引用。我之前恰巧就遇到过,两次 require('egg-core')
但是他们并不相等。
分类:
webpack
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现