90%的人都不知道的Node.js 依赖关系管理(上)

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

引言

Node.js中的一个重要概念是依赖关系管理。本文就将带你们了解依赖管理的各类模式以及Node.js如何加载依赖。
Node.js编写模块化代码很是简单,咱们可使用单个js文件非模块化的编写全部应用程序的内容。
在这里你可能会问,模块(module)是什么,它又有什么做用。
大型项目的实施之中,会有不少分工协做,为了可让分工更加方便和顺利,咱们能够将编写好的代码封装起来,重复使用或者提供给第三方使用。在项目封装阶段将全部模块组织编译成一个完整程序。
总而言之,模块是代码为了便于在开发中共享和重用,而进行的分组。这些模块使咱们能够将复杂的应用程序分解。以便让咱们更好地理解代码,发现并修复Bug。基于CommonJS,Node.js中使用require这个关键字来获取一个JavaScript文件。前端

开始

咱们给项目建立一个目录,用npm init 进行初始化,建立了app.js和appMsg.js两个JavaScript文件。node

1.png
此时两个.js文件都是空的,咱们来继续更新appMsgs.js文件web

2.png

此处能够看到module.exports的用法,该方法公开给定文件(appMsgs.js)中的属性或对象,这些属性或对象能够在另外一个文件中使用。本例中该文件是app.js
在这个系统中每一个文件均可以访问module.exports,因此appMsgs.js文件中的一些项就被公开了,下面是具体使用这些内容的展现:npm

3.png

使用require关键字引用文件,使用的时候它将返回一个表示模块化代码段的对象。咱们将其分配给变量appMsgs variable,而后在console.log语句中使用属性。获得如下输出:缓存

4.png
执行JavaScript,构造一个返回对象。这个对象能够是一个类构造函数,也能够是一个包含许多元素或一些简单属性的对象。
所以,经过管理require和module.exports,咱们能够建立这些模块化应用程序。
所需的功能加载代码并只加载一次。若是其余人经过require请求这个对象,只会获得这个对象的缓存版本。app

接下来看看其余方法模块化

5.png

对代码进行修改,再也不公开一个对象,而是导出整个函数。每次函数调用都会执行此代码
下面是它如何在app.js文件中使用函数

6.png

不须要调用属性,只须要像执行函数同样。与函数执行不一样的是每次执行这个代码,函数中的代码都会被从新执行
下面是运行结果工具

7.png

以上是module.exports的两种模式及其差别,另外一个常见模式中咱们须要知道如何使用它做为构造函数性能

8.png

下面是更新后的app.js文件

9.png

本质上来讲这样与在JavaScript中建立伪类并容许建立伪类的实例时是同样的,下面是更改以后的输出

10.png

如下是该模式的另外一个例子
咱们建立一个名为userRepo.js的新文件

11.png

下面是app.js和此更改的执行结果

12.png

13.png

单个文件使用require很常见,但别忘了另外一种模式:文件夹的之间的依赖关系

文件夹相关性

在正式介绍文件夹相关性以前,咱们先来了解Nodejs如何查找依赖项,不要忽略前面例子中的这一内容:

var appMsgs = require("./appMsgs")

Node.js会查找appMsgs.js文件,也会将appMsgs做为目录查找,不管它首先找到哪一个都会进行记录。
接着咱们建立一个名为logger的文件夹,在该文件夹中建立一个index.js文件

14.png

app.js文件,它用require调用这个模块

15.png

在这个例子中值得注意的是:

var logger = require("./logger/index.js")

该内容彻底正确,但若是改为一下内容:

var logger = require("./logger")

由于项目中没有logger.js,因此在有一个logger目录时,默认状况下会加载index.js做为logger的起点。这就是咱们命名index.js的缘由,这段代码的结果:

16.png

看到这里,你可能会疑惑为何还要费心去完成建立文件夹和inex.js的额外步骤呢?
缘由是,咱们可能正在组合一个复杂的依赖项,这个依赖项可能还有其余依赖项。而记录器的调用者不须要知道还有不少其余依赖项存在。
这是一种封装形式,当咱们构建更复杂的内容时,咱们能够用多个文件构建它们,而在用户端使用单个文件。文件夹是一种管理这些依赖关系的好方法。

Node Package Manager (NPM)

再次要介绍的另外一个内容是NPM,你必定了解它的功能,带来了不少便利。使用的方法也很简单。
咱们可使用npm安装依赖项

npm install underscore;

而后能够在app.js中简单地require

17.png

咱们能够看到标红位置如何使用下划线包提供的功能。除此以外,当咱们须要使用这个模块时,并不指定文件路径,只须要使用它的名称,Node.js将从应用程序中的node\u modules文件夹加载这个模块

18.png

下面是它的输出

19.png

总结

本文介绍了Nodejs如何管理它的依赖关系,而且在咱们的应用程序中看到了一些可使用的模式。但愿能够对各位的开发学习带来帮助。

拓展阅读

欢迎下载试用纯前端表格控件 SpreadJS,实现对web系统中表格功能模块的性能进行优化。

相关文章
相关标签/搜索