V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GrapeCityChina
V2EX  ›  程序员

90%以上的人都不知道的 Node.js 依赖关系

  •  
  •   GrapeCityChina ·
    GrapeCity · 2021-05-27 11:43:57 +08:00 · 574 次点击
    这是一个创建于 1276 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开始

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

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

    2.png

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

    3.png

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

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

    接下来看看其他方法

    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 如何管理它的依赖关系,并且在我们的应用程序中看到了一些可以使用的模式。希望可以对各位的开发学习带来帮助。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2787 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:00 · PVG 21:00 · LAX 05:00 · JFK 08:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.