【发布时间】:2021-04-15 09:40:07
【问题描述】:
我是 node.js 的新手,但已经开发了足够多的服务器端代码,因此为每个自定义编写的库函数导出并需要一个文件变得越来越笨拙。我一直在阅读有关替代方案的信息并且感到困惑——也许是因为我应该在我的目标上妥协。
有 3 个独立的可重用 .js 文件,它们是一种逻辑任务的一部分。我们将任务类型称为“x”。
- xLibrary.js - 特定于该任务的杂项实用程序 - 许多功能
- xSubtask1.js - 一些复杂的代码和支持功能
- xSubtask2.js - 一些复杂的代码和支持功能
如果我将每个文件视为一个单独的模块并带有一个引用它的单独变量,我了解如何继续。但是由于子任务是任意隔离的(由于复杂性而不是逻辑关联),因此必须记住哪个文件包含给定函数会造成混乱。
我想将所有模块放在 1 个子目录中,并将所有函数引用为 xTask.*。我知道这样做的唯一方法是将所有文件合并为一个,但这会使维护代码更加复杂。
我已经阅读了文章和 stackoverflow,直到我头晕目眩。许多更全面的答案使用逻辑将每个模块添加到子目录中。我认为硬编码函数和文件名更适合我目前的专业水平。
谁能告诉我怎么做?
【问题讨论】:
-
为方便导入,您可以制作一个父模块,从您的三个子模块中的每一个中导入所有功能,然后将它们全部导出,这样客户端就可以只导入一个父模块并得到一切。这取决于它是使用
require()的 CommonJS 模块还是使用import的 ESM 模块。 -
听起来不错@jfriend00。我在 CommonJS 环境中。我认为当前的 node.js 需要,除非我进入实验模式。快速搜索没有找到简单的方向。如果您有时间,我将不胜感激进一步的指导,但无论如何,我很感激有几个搜索词可以进一步调查。
-
仅供参考,最新版本的 nodejs 可以使用没有实验模式的 ESM 模块。你只需要给 ESM 模块一个 .mjs 文件扩展名,在你的 package.json 文件中设置正确的模块类型。
-
我真的不能给你建议。这真的取决于你在做什么。我个人还没有发现 ESM 模块有任何显着的编程优势,所以我仍在使用 CommonJS 模块。 ESM 模块有一些限制(主要是为了让 bunders 的生活更轻松)。例如,您不能在 ESM 模块中使用下面我的答案中显示的技术(使用计算导出),因为所有 ESM 导出都必须在不运行任何代码的情况下静态命名。
标签: javascript node.js module node-modules