当前位置: 首页 > news >正文

Day 07 - ES 模块化

Day 07 - ES 模块化今天学完你能做什么用import/export组织现代 JS/TS 代码理解 ES Module 和 CommonJS 的区别用typemodule在浏览器和 Node.js 中使用一、CommonJS 和 ES Module 一句话区分// CommonJSNode.js 传统 ES Module现代标准constmathrequire(./math);import{add}from./math;module.exports{add};exportfunctionadd(){}// 同步运行时加载 静态编译时确定ES Module 是 ECMAScript 官方标准是未来。二、导出 export2.1 命名导出——导出多个// math.tsexportfunctionadd(a:number,b:number):number{returnab;}exportfunctionmultiply(a:number,b:number):number{returna*b;}exportconstPI3.14159;// 也可以先定义再统一导出functionsubtract(a:number,b:number):number{returna-b;}export{subtract};2.2 默认导出——导出一个主力// calculator.tsexportdefaultclassCalculator{add(a:number,b:number){returnab;}sub(a:number,b:number){returna-b;}}// 一个文件只能有一个 export default2.3 重命名导出// utils.tsfunctionformatDate(date:Date):string{returndate.toISOString();}// 导出时改名export{formatDateastoDateString};三、导入 import3.1 导入命名导出// 按需导入import{add,multiply,PI}from./math;console.log(add(1,2));// 3console.log(multiply(3,4));// 12console.log(PI);// 3.14159// 起别名import{addassum}from./math;console.log(sum(5,5));// 10// 全部导入到一个命名空间import*asMathfrom./math;console.log(Math.add(1,2));console.log(Math.PI);3.2 导入默认导出// 默认导出可以用任意名字接收importCalcfrom./calculator;constcalcnewCalc();console.log(calc.add(10,5));// 153.3 混合导入// 同时导入默认和命名导出importCalculator,{add,PI}from./math;// 或者分开写importCalculatorfrom./calculator;import{add}from./math;3.4 只执行模块不导入任何东西// 比如初始化全局配置import./init;// 执行 init.ts 中的代码但不导入值四、ES Module vs CommonJS 对比表特性CommonJSES Module关键词require/module.exportsimport/export加载时机运行时编译时静态分析加载方式同步异步浏览器/ 同步NodeTree Shaking❌ 不支持✅ 支持打包时可删除未用代码默认导出整个module.exportsexport default顶层 this指向module.exportsundefined动态导入require可以在任何地方import()函数返回 Promise使用环境Node.js浏览器 Node.js五、动态 import() —— 按需加载// 普通 import 是静态的必须写在文件顶部// import { heavyFunction } from ./heavy-module;// 动态 import() 可以用在需要的时候才加载asyncfunctionloadHeavyModule(){constmoduleawaitimport(./heavy-module);module.heavyFunction();}// 条件加载asyncfunctionloadLocale(lang:string){letmessages;if(langzh){messagesawaitimport(./locales/zh);}else{messagesawaitimport(./locales/en);}returnmessages.default;}六、在浏览器和 Node.js 中使用浏览器!-- 必须加 typemodule --scripttypemoduleimport{add}from./math.js;console.log(add(1,2));/scriptNode.js// package.json{type:module// 整个项目用 ES Module}或者文件用.mjs扩展名。七、实际项目中的最佳实践// 分层导出模式 // 1. 每个模块写好自己的功能// utils/format.tsexportfunctionformatDate(date:Date):string{/* ... */}exportfunctionformatMoney(amount:number):string{/* ... */}// utils/validate.tsexportfunctionisEmail(value:string):boolean{/* ... */}exportfunctionisPhone(value:string):boolean{/* ... */}// 2. 用 index.ts 做桶文件统一导出// utils/index.tsexport{formatDate,formatMoney}from./format;export{isEmail,isPhone}from./validate;// 3. 使用时只需 import 一个路径import{formatDate,isEmail}from./utils;八、CommonJS → ES Module 迁移速查// CommonJS → ES Moduleconstxrequire(./x);importxfrom./x;const{a,b}require(./x);import{a,b}from./x;module.exports{a,b};export{a,b};module.exportssingle;exportdefaultsingle;exports.afunction(){};exportfunctiona(){}今日小结┌──────────────────────────────────────────────┐ │ │ │ export { a, b } → 命名导出可多个 │ │ export default X → 默认导出只一个 │ │ │ │ import { a } from → 按需导入 │ │ import X from → 导入默认 │ │ import * as N from → 全部导入到命名空间 │ │ │ │ import() → 动态导入返回 Promise │ │ │ │ ES Module 是标准CommonJS 在慢慢退出 │ │ │ │ 口诀export 往外给import 往里拿 │ │ │ └──────────────────────────────────────────────┘
http://www.rkmt.cn/news/1409221.html

相关文章:

  • Zotero 结合 Codex 打造智能学术工作流实战
  • 单片机IO口扩展方案:ULN2003A驱动芯片的应用与设计
  • Edge 浏览器实用功能全解析,这些隐藏技巧能大幅提升办公效率
  • 主流数字人平台如何避坑?2026价格透明与无隐藏收费平台对比
  • 别再调包了!用NumPy手写PCA降维,从协方差矩阵到特征向量保姆级推导
  • 《C语言电子书-2026最新版》-C语言开发环境搭建
  • 短视频矩阵怎么选?对比3大服务商后发现真相
  • 担心材料性能不稳定?这家UNS N07718高温合金厂商助您解决加工难题 - 品牌2025
  • 飞渡科技携手华为,共同开启空间智能新纪元
  • 【腾讯云】利用云解析DNS快速快速添加解析域名教程
  • 企业级 Multi-Agent 灰度发布:金丝雀部署+流量切分的实操指南
  • 用Python的NetworkX库玩转马尔可夫链:从天气预测到PageRank的实战演练
  • 2026年 宝钢HC900/1180CP吉帕钢推荐榜:高强度冷成型与轻量化解决方案的创新之选 - 品牌企业推荐师(官方)
  • STM32+LVGL项目实战:给你的智能家居界面做个漂亮的中文皮肤
  • RAG系列:#5 RAG中的11种分块策略
  • 别再只用apt update了!Ubuntu系统升级的正确姿势(附do-release-upgrade保姆级教程)
  • 2026年5月常州企业快餐配送品牌公司业内推荐:为何“常州锦润餐饮管理有限公司”备受青睐? - 2026年企业资讯
  • 2026年隔离墩模具/挡土墙模具厂家推荐:流水槽/排水沟/化粪池/护坡模具优质选型与口碑解析 - 品牌企业推荐师(官方)
  • 如何通过 6 种简单方法将联系人从 iPhone 传输到三星
  • 信号去趋势实战避坑:最小二乘法拟合,多项式阶数到底选几阶才合适?
  • VLSI架构实现心电信号自适应压缩:在功耗与精度间动态平衡
  • 2026年东莞塑胶/注塑/新材料/硅胶制造业ERP系统推荐榜单:深度解析信息化高效转型之选 - 品牌企业推荐师(官方)
  • Ensembl BioMart实战:快速搞定基因ID、Symbol与长度的匹配表(避坑TSV文件空格问题)
  • 6款论文降AI率平台实测:AI率直降安全线,学生党必入平价款
  • 光电子神经形态计算:RTD神经元原理与应用
  • 在 HarmonyOS 模拟器上用递归种出科赫分形
  • 苏州华为培训哪家好?
  • WSL2磁盘空间告急?保姆级教程教你迁移Ubuntu到D盘并释放C盘空间
  • ECC 内存技术新手入门与部署指南
  • 数据结构(5) 循环列表,哈希表