首页 > 其他分享 >用代码验证,esm 导出的是值的引用,commonjs导出的是值的拷贝

用代码验证,esm 导出的是值的引用,commonjs导出的是值的拷贝

时间:2024-04-10 20:59:56浏览次数:32  
标签:commonjs 导出 模块 拷贝 esm vite

首先需要学习一下 esm 和 commonjs 的区别,其中一条关于导出值我们可以手动验证一下,先记住结论

  1. esm 导出的是值的引用
  2. commonjs导出的是值的拷贝

没错我又遇到这个问题了,面试官先问我 commonjs 和 esm 有啥区别?

然后问如果 commonjs 导出一个模块,在模块内部改变一个值,模块外部的值会改变吗,我一脸懵逼?难道不是一样的么?然后又问 esm 的呢?【正确答案是commonjs 不会改变,esm 会改变】

显而易见,他想得到的区别的答案之一肯定有【导出值】的区别。很遗憾我没有答出来。

esm 导出的是值的引用

可以使用这个项目中的 vite 目录验证这个问题,因为 vite 是默认支持 esm的,增加几个文件用于测试

1. 增加一个模块文件导出一个数组

2. 增加两个 test 文件

分别引用上面的模块,然后其中一个改变数组的值,具体请看代码

3. 进入 vite 文件夹

运行 npm run dev

commonjs 导出的是值的拷贝

同样,可以使用这个项目中的 webpack 目录验证这个问题,因为 webpack 是支持 commonjs 的【当然也可以支持esm,只不过我这个现成的项目只支持 commonjs】,增加几个文件用于测试。

步骤和上面一样,具体请看代码,不再赘述!

运行 cd webpack 和  npm run dev

总之牢记这两句话,【esm 导出的是值的引用,commonjs导出的是值的拷贝】问你 esm 和 cjs 的区别,这个是必答的!

上面的代码都在这个分支

别老收藏不看啊!点进去给我的仓库点点 star !!!!

标签:commonjs,导出,模块,拷贝,esm,vite
From: https://blog.csdn.net/qq_17335549/article/details/137558192

相关文章

  • MXnet安装 与入门 符号式运算 Symbol 数据同步 KVStore 自动并行计算 数据的导出与载
    MXnet参考通过MXNet/Gluon来动手学习深度学习在线githubpdf代码深度学习库MXNet由dmlc/cxxnet,dmlc/minerva和Purine2的作者发起,融合了Minerva的动态执行,cxxnet的静态优化和Purine2的符号计算等思想,直接支持基于Python的parameterserver接口,使......
  • ElementUI 导出表格数据xlsx
    1.下载相应的依赖(命令如下)npminstall--savexlsxfile-saver 或 yarnaddxlsxfile-saver2.下载完成后引入相应的插件 importFileSaverfrom"file-saver"; import*asXLSXfrom"xlsx";3.给el-table中定义一个id<el-table   :data="list"   id="......
  • 导出和导入UEFI启动项列表,您可以使用 bcdedit 命令,并结合使用输出重定向来实现
    导出和导入UEFI启动项列表,您可以使用bcdedit命令,并结合使用输出重定向来实现。以下是一个示例批处理脚本,演示如何导出和导入UEFI启动项列表:导出UEFI启动项列表[email protected]/enumfirmware>UEFI_boot_entries.txt......
  • vue使用docxtemplater导出word
    安装//安装docxtemplaternpminstalldocxtemplaterpizzip--save//安装jszip-utilsnpminstalljszip-utils--save//安装jszipnpminstalljszip--save//安装FileSavernpminstallfile-saver--save//引入处理图片......
  • dubbo3.0 服务导入导出原理
    不管是服务导出还是服务引入,都发生在应用启动过程中,比如:在启动类上加上@EnableDubbo时,该注解上有一个@DubboComponentScan注解,@DubboComponentScan注解Import了一个DubboComponentScanRegistrar,DubboComponentScanRegistrar中会调用DubboSpringInitializer.initialize......
  • 开发Element-UI的Table 组件列显示隐藏,列表数据勾选批量导出/全量导出,显示导出进度并
    #用法<TabColDisplay:total="total"api-url="hgp/order"api-name="hgpLocalList":s-param="listQuery":select-ids="selIds"title="快速......
  • 剪映PC电脑版开心版5.5.0免VIP导出补丁下载_替换一次即可长期使用
    剪映5.5.0免VIP导出补丁来了,可以使用VIP特效,文字转语音声效,滤镜,等全部需要VIP的素材,都可以直接导出,不需要VIP并且是需要替换一次,每次启动软件都是可以直接导出的,只要不重新安装剪映,都是可以使用的补丁对应版本:5.5.0(不是5.5.0版本会出现闪退)补丁安全无毒无广告使用教程:打开......
  • 数据库导出数据至本地
    importjsonimportcalendarimportrefrombinimport*ismonthwrite=False#是否按月写入,数据量大时可开启start_time="2024-02-27"#开始时间end_time="2024-03-26"#结束时间wirte_path=r"C:\Users\isoftstone\Desktop\导出.xlsx"#写入的文件路径read_path=r"C:......
  • Orcale数据库导入导出备份
    orcale数据库的导入导出及备份全库导入导出导出exp用户名/密码file=想要导出之后文件名 full=y用户名必须拥有dba权限,可以不指定文件名导入imp用户名/密码full=yfile=导出之后的文件名.dmp如果不指定文件名则自动识别默认名按用户导入导出导出exp用户名/......
  • 导出多个文件到一个Excel中的不同sheets
    @ApiOperation(value="导出多个文件到一个Excel中的不同sheets",produces="application/octet-stream")@PostMapping("/exportMultipleExcel")publicvoidexportMultipleExcel(@RequestBodyDataCountVOdataCountVO,HttpServletResponseresponse)t......