node.js module/require 索引es5支持我自己的复杂库
node.js module/require index es5 supporting my own complex library
我是 node.js 的新手,但已经开发了足够多的服务器端代码,以至于为每个自定义编写的库函数导出和需要一个文件变得越来越笨拙。我一直在阅读替代方案并且感到困惑——也许是因为我应该在我的目标上妥协。
有 3 个独立的可重用 .js 文件是一种逻辑任务的一部分。我们称任务类型为“x”。
- xLibrary.js - 特定于该任务的杂项实用程序 - 许多功能
- xSubtask1.js - 一些复杂的代码和支持函数
- xSubtask2.js - 一些复杂的代码和支持函数
如果我将每个文件视为一个单独的模块并使用一个单独的变量引用它,我知道如何继续。但是由于子任务是任意分离的(由于复杂性而非逻辑关联),因此必须记住哪个文件包含给定函数会造成混淆。
我想将所有模块放在 1 个子目录中,并将所有函数引用为 xTask.*。我知道的唯一方法是将所有文件合并为一个文件,但这会使维护代码变得更加复杂。
我阅读文章和 Whosebug 直到我头晕目眩。许多更全面的答案使用逻辑将每个模块添加到子目录中。我认为硬编码函数和文件名更适合我目前的专业水平。
有人可以告诉我如何进行吗?
对于 CommonJS 模块,您可以制作一个父模块,该父模块收集一组子模块的所有导出,然后将它们全部导出为一个主对象的一部分。这是我在我的一个项目中使用的一些代码:
// this just re-exports everything that the sub-modules export
module.exports = [
'./mapConcurrent.js',
'./deferred.js',
'./utils.js',
'./rateMap.js',
'./concurrency.js',
'./retry.js',
].reduce((obj, file) => {
const m = require(file);
Object.assign(obj, m);
return obj;
}, {});
我把它放在一个 index.js
文件中,然后允许这个模块的用户只 require()
目录名,他们会得到一个导入的对象,上面有所有入口点整个模块。
注意:这假设任何子模块中的 none 导出符号具有冲突的名称。这是由您自己管理的,因此这是执行此操作的要求。
我是 node.js 的新手,但已经开发了足够多的服务器端代码,以至于为每个自定义编写的库函数导出和需要一个文件变得越来越笨拙。我一直在阅读替代方案并且感到困惑——也许是因为我应该在我的目标上妥协。
有 3 个独立的可重用 .js 文件是一种逻辑任务的一部分。我们称任务类型为“x”。
- xLibrary.js - 特定于该任务的杂项实用程序 - 许多功能
- xSubtask1.js - 一些复杂的代码和支持函数
- xSubtask2.js - 一些复杂的代码和支持函数
如果我将每个文件视为一个单独的模块并使用一个单独的变量引用它,我知道如何继续。但是由于子任务是任意分离的(由于复杂性而非逻辑关联),因此必须记住哪个文件包含给定函数会造成混淆。
我想将所有模块放在 1 个子目录中,并将所有函数引用为 xTask.*。我知道的唯一方法是将所有文件合并为一个文件,但这会使维护代码变得更加复杂。
我阅读文章和 Whosebug 直到我头晕目眩。许多更全面的答案使用逻辑将每个模块添加到子目录中。我认为硬编码函数和文件名更适合我目前的专业水平。
有人可以告诉我如何进行吗?
对于 CommonJS 模块,您可以制作一个父模块,该父模块收集一组子模块的所有导出,然后将它们全部导出为一个主对象的一部分。这是我在我的一个项目中使用的一些代码:
// this just re-exports everything that the sub-modules export
module.exports = [
'./mapConcurrent.js',
'./deferred.js',
'./utils.js',
'./rateMap.js',
'./concurrency.js',
'./retry.js',
].reduce((obj, file) => {
const m = require(file);
Object.assign(obj, m);
return obj;
}, {});
我把它放在一个 index.js
文件中,然后允许这个模块的用户只 require()
目录名,他们会得到一个导入的对象,上面有所有入口点整个模块。
注意:这假设任何子模块中的 none 导出符号具有冲突的名称。这是由您自己管理的,因此这是执行此操作的要求。