转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
原文参考:https://dzone.com/articles/node-dependency-management-part2
在上篇介绍Node.js依赖关系管理的文章中,我们介绍了关于Node.js模块的基础知识,如何使用module.exports和require方法处理依赖项,以及文件夹依赖项(folder dependencies)的工作方式和工作原理。
今天我们将继续从这一点出发,来了解如何使用这个系统模块将应用程序分解成多个模块,以及这样做的优势和Node.js的工作原理。
本文内容中提及到了上篇中一些经验分享,在阅读本文之前可以阅读上篇详细了解。
在我们继正式开始了解学习如何使用多个模块设置应用程序之前,我们一起来了解Node.js模块一些其他方面的有趣内容。
Node Modules是单例模式吗
在上一篇文章中,我们讨论了Node.js一次只会加载一个模块。如果发出请求,Node.js会给出该模块的缓存副本。因此看起来这些模块的行为就像独生子女。这里我们看一个例子,来说明这种情况。
首先,我们为应用程序创建了一个项目,初始化应用程序,并创建了一个文件user.js,如下所示:
接着,在APP.JS中我们会使用用户模块(user module),并按照如下方式使用:
可以看到我们创建两了两个用户,只要对其中一个变量做出修改就会影响另一个变量的内容。我们必须意识到用户模块会被缓存,并在进行另一个请求的时间内被重用。
接下来我们把它改成一个构造函数,看看他如何进行工作
构造函数
我们在上篇内容中介绍了构造函数,实现了user.js的更改:
这一部分内容下面要继续在app.js中使用:
我们可以看到两个不同的例子,并且可以直观感受到这之间的不同。不用太担心不同的问题,后文中将会介绍其他例子和解决方案。
现在我们开始介绍关于我们本次的主题,关于如何使用模块管理应用程序。
应用程序构建
我们开始搭建一个简单的应用程序基础,接下来会在讲解的过程中不断对它进行细化。
我们已经创建了一些新的文件夹,现在程序中包含的结构如下:
首先我们给不同的模块创建了单独的文件夹。现在已经有的图书管理文件夹,另一个用于日志记录器文件夹,类似于用户管理。这样我们的每个模块都有重点,易于定位和管理。同时在每个文件夹内都有子文件夹。这里我们需要注意文件夹级别的index.js文件,它将作为模块的API。
然后在app.js中我们可以通过require引用模块,看到它按照预期工作的工程。注意我们如何通过require user.js来引用它。
现在我们来更新代码内容:
我们在图书管理模块下创建了几个项目,在这这模块中我们可以看到book.js遵循常见JavaScript构造函数模式(但与user.js中看到的构造函数示例略有不同)。
在相应的index.js文件中有以下代码:
index.js作为模块的API,让我们在app.js中使用它,如下所示:
将user.js改为与book.js相同的构造函数模式后我们的程序正按照预期工作。这里提示一点,我们可以使用Node.js中其他语言的现有JavaScript内容进行编写。根据自己的偏好进行选择就可以。
下面是代码user.js重构之后的样子:
总结
本文中介绍的应用程序内容都十分基础,我们通过学习Node.js依赖性管理的一些基础知识和一些建立项目结构的常用方法来进行了文件模块管理。
我们还看到Node.js应用程序中使用JavaScript设计模式的相关知识,并且也通过一些简单的例子进行说明。