”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > \“主要是模块和导入导出-package.json!\”

\“主要是模块和导入导出-package.json!\”

发布于2024-11-15
浏览:865

\

这里有一个有趣且引人入胜的方式来解释为什么所有四个字段 - modulemainexportsimport——package.json 中需要:

为什么所有四个字段都很重要:

  1. 主要:经典看门人

    • 角色:将 main 视为包中明智的老圣人。它自 Node.js 诞生以来就一直存在,并作为 CommonJS 模块的主要入口点。
    • Need:它确保向后兼容性,允许旧的 Node.js 应用程序使用 require() 轻松加载您的包。这对于仍然依赖 CommonJS 的遗留系统至关重要。
  2. 模块:现代潮流引领者

    • 角色:模块就像邻居家的酷孩子,代表ESM(ES6模块)标准。它指向使用导入语法的项目的入口文件。
    • 需要:随着 JavaScript 社区因其诸如树摇动和静态分析等优点而转向 ESM,模块允许现代捆绑器和环境有效地利用包的 ESM 版本。
  3. 出口:多功能大师

    • 角色:导出字段是最终的多任务处理者,允许开发人员为各种模块系统定义多个入口点。它可以区分ESM和CommonJS。
    • 需求:在包需要灵活的世界中,导出可以让您根据环境或格式定制包的使用方式,这对于满足 ESM 和 CommonJS 用户的复杂库至关重要。
  4. 导入:ESM 特定专家

    • 角色:导入是专注的、仅限 ESM 的专家,专门为 ESM 包定义明确的入口点。
    • 需要:导入字段通过其简单的方法简化了仅需要支持现代导入语法的包的配置,使其成为干净、简化的仅 ESM 项目的宝贵补充。

大局观:

  • 兼容性:这些字段共同确保您的包可以在不同的环境中使用,从旧版 Node.js 应用程序到现代前端框架。
  • 灵活性:它们允许开发人员选择合适的方法来加载模块,满足各种需求和偏好。
  • 面向未来:随着 JavaScript 的发展,拥有清晰的结构可以帮助开发人员适应新标准,同时仍然保持与现有代码库的兼容性。

这是一个比较 package.json 中的 module、main、exports 和 import 字段的表格:

标准 主要的 模块 出口 进口
目的 CommonJS 模块的入口点 ESM 模块的入口点 对模块导出的细粒度控制 定义仅限 ESM 包的入口点
引入 早期 Node.js 版本 主要针对捆绑商 Node.js 12 Node.js 16
目标格式 CommonJS ESM(ES6 模块) ESMCommonJS 仅 ESM
用例 对于使用 require() 的模块 对于使用导入的模块 对于暴露多个入口点的包 对于仅支持 ESM 的软件包
兼容性 在 Node.js 和 CommonJS 中工作 在捆绑程序、现代环境中工作 适用于 Node.js 12,适用于 ESM 和 CommonJS 适用于 ESM 的 Node.js 16
灵活性 仅限一个入口点 ESM 的一个入口点 不同格式的多个入口点 ESM 的一个入口点
现代 JS 中的用法 用于向后兼容 捆绑器中 ESM 的首选 多格式包的首选 现代软件包的简化 ESM 条目
优先级 如果其他人存在,则优先级最低 如果缺少导出,则在捆绑程序中使用 高于 main 和 import 的最高优先级 如果缺少导出则使用
文件路径处理 单个文件 单个文件 可以导出多种文件和格式 ESM 单个文件
Node.js 支持 原生 CommonJS 支持 Node.js 本身不支持 Node.js 12 支持 Node.js 16 支持

结论 - 我对以上四点的呼吁

package.json 中的 exports 字段是一项强大的功能,可以增强现代 JavaScript 开发中包的结构和访问方式。通过允许开发人员为不同的模块格式(例如 ESM 和 CommonJS)定义多个入口点,它可以提高兼容性和灵活性。

使用 exports 字段的主要好处包括:

  1. 清除路径定义

  2. 增强树摇动

  3. 改进的静态分析

  4. 模块化结构

exports 字段不仅实现了包管理的现代化,而且还通过使包使用起来更加直观和高效,显着改善了开发人员的体验。拥抱此功能对于创建高质量、可维护的 JavaScript 库和应用程序至关重要。

感谢chatgpt帮助制作标题和字幕。

版本声明 本文转载于:https://dev.to/rameshpvr/mainly-modules-and-importing-exports-packagejson-nd1?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-07-08
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-07-08
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-07-08
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-07-08
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-07-08
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-07-08
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-07-08
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-07-08
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-07-08
  • 如何避免Go语言切片时的内存泄漏?
    如何避免Go语言切片时的内存泄漏?
    ,a [j:] ...虽然通常有效,但如果使用指针,可能会导致内存泄漏。这是因为原始的备份阵列保持完整,这意味着新切片外部指针引用的任何对象仍然可能占据内存。 copy(a [i:] 对于k,n:= len(a)-j i,len(a); k
    编程 发布于2025-07-08
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否需要手动调用“ delete”操作员在heap-exprogal exit exit上。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(HEAP内存)的指针。当应用程序退出时,此内存是否会自动发布?通常,是。但是,即使在这...
    编程 发布于2025-07-08
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-07-08
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-07-08
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-07-08
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确...
    编程 发布于2025-07-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3