如何使用 npm 管理 Linux 服务器上的 Node.js 软件包

介绍

Node.js 是一个流行的 JavaScript 平台,用于服务器侧的编程,允许您快速构建和运行 Web 应用程序. 在过去的指南中,我们讨论了 如何在 Ubuntu 14.04 服务器上安装 Node.js

在本指南中,我们将讨论如何使用npm,一个Node.js包管理系统,在您的服务器上管理Node.js包。

我们会假设你有Node.js和npm都安装了,你可以按照上面的指南来让这些在Ubuntu 14.04上运行,我建议使用该教程中涵盖的nvm方法。

如果你只是想快速开始,你也可以在Ubuntu 14.04的存储库中找到这些包,然后通过键入来安装它们:

1sudo apt-get update
2sudo apt-get install nodejs npm

熟悉 npm 的方法

现在你已经安装了必要的组件,我们可以开始。

我们要做的第一件事是将一些npm自动完成的功能添加到我们的壳中,将一些信息添加到我们的壳配置文件的底部。

您可以通过键入这样做:

1npm completion >> ~/.bashrc

现在,只需源配置文件来重新阅读您刚刚添加的新更改:

1source ~/.bashrc

现在,npm 应该能够通过按[TAB]键自动完成其命令。

要了解一下,最好的事情是熟悉 npm 提供的帮助功能. 要了解 npm 内可用的子命令,您可以键入:

1npm help

1Usage: npm <command>
2
3where <command> is one of:
4    add-user, adduser, apihelp, author, bin, bugs, c, cache,
5    completion, config, ddp, dedupe, deprecate, docs, edit,
6    explore, faq, find, find-dupes, get, help, help-search,
7. . .

要简要概括这些子命令的含义,您可以键入:

1npm -l

 1Usage: npm <command>
 2
 3where <command> is one of:
 4
 5    adduser npm adduser
 6                Then enter stuff at the prompts
 7
 8    bin npm bin
 9                npm bin -g
10                (just prints the bin folder)
11. . .

您可以通过使用以下格式获得每个命令的更广泛的概述:

npm help subcommand

这将为所需子命令带来一个单独的男人页面。

如果您不知道哪个命令涵盖您要执行的操作,您也可以使用以下内容在帮助主题中搜索:

npm help-search search_term

查找有关您的系统的信息

现在你已经设置并知道如何访问其内置的帮助,我们可以探索. 让我们开始学习如何询问有关npm的有关我们的系统的信息。

在我们这样做之前,我们应该谈论本地和全球包之间的区别。

全球VS本地包裹

在创建 Node.js 应用程序时,你会创建一个目录结构来存储你的应用程序. 在项目目录中,将有一个名为node_modules的子目录。

让我们创建一个空的目录结构,作为我们的包目录作为一个例子:

1mkdir -p ~/projects/test_package/node_modules
2cd ~/projects/test_package

在本地安装的模块可以通过使用常规的JavaScript require()方法在您的项目中使用。

如果你需要使用一个包的命令行功能,你应该安装它 全球. 全球安装的应用程序被保存在 ~/.npm/ 目录中. 他们的命令行功能将可用于所有 Node.js 应用程序。

知道这一点,你可以看到我们将如何具有与每个特定类型的包相关的功能. 默认情况下,大多数npm命令将假定你正在谈论本地包,除非你通过-g--global旗帜。

在我们的系统上安装的包列表

现在你已经知道本地和全球包之间的区别了,我们可以继续下去,因此,要在我们的test_package目录中列出可用的(本地安装的)Node.js包,我们可以键入:

1npm ls

1/home/demouser/projects/test_package
2└── (empty)

由於我們尚未為我們的應用程式安裝任何 Node.js 套件,這顯示為空。

然而,npm 会自动在全球范围内安装某些软件包,让我们通过-g 标志来查看:

1npm ls -g

1/home/demouser/.nvm/v0.11.13/lib
2└─┬ [email protected]
3  ├── [email protected]
4  ├── [email protected]
5  ├── [email protected]
6  ├── [email protected]
7  ├── [email protected]
8. . .

正如你所看到的,有相当多的全球包,它们以依赖树格式呈现。

您可以使用-l-a旗帜获取额外信息. 您可以通过选择通过-json旗帜在 JSON 中查看此信息。

寻求其他信息

除了简单地询问npm安装的软件包外,我们还可以询问其环境的其他信息。

我们可以看到 npm 指的是本地包等级中的根模块目录,通过键入:

1npm root

1/home/demouser/projects/test_package/node_modules

您可以通过使用前缀子命令获取您正在工作的包的顶级路径:

1npm prefix

1/home/demouser/projects/test_package

这些也可与-g旗帜一起使用,以查看全球文件存储位置。

要查看 npm 将安装可执行的位置,您可以找到当前项目的bin目录:

1npm bin

1/home/demouser/projects/test_package/node_modules/.bin

探索一个包的文件

要快速前往安装包的目录位置,您实际上可以使用探索子命令,这将打开包安装的目录中的子壳。

例如,我们可以通过键入在 npm 本身安装的目录中打开子壳:

1npm explore -g npm

1Exploring /home/demouser/.nvm/v0.11.13/lib/node_modules/npm
2Type 'exit' or ^D when finished

您可以操纵或探索该目录中的文件,然后退出子壳以返回您之前所做的事情。

1exit

使用 npm 作为包管理器

到目前为止,我们已经覆盖了很多领域,但迄今为止,我们已经脱颖而出 npm 的主要功能,人们使用 npm 的主要原因是其包管理功能。

搜索和安装包

当你需要一个 Node.js 包时,你可以使用 npm 来搜索它。

我们可以在 npm 包档案中搜索这个包,这些包档案位于 npm 网站:

1npm search express

这实际上会返回一个非常长的列表,因为express是一个非常受欢迎的包。你可以将其输入到像这样的页面中,以便更容易查看。我们还可以使用常规表达式(使用一些滑稽的字符来逃避壳解释)如下:

1npm search /^express\[\ \]

1NAME DESCRIPTION AUTHOR DATE VERSIO
2express Sinatra inspired web development framework =tjholowaychuk… 2014-05-12 4.2.0

如果你得到的结果太多,它可能更容易只是去npm网站,看看具体的包被称为什么。

当你知道包的名称时,你可以安装它. 因为我们需要 express 的命令行功能,我们会在全球范围内安装它:

1npm install -g express

这将下载并安装快递包及其所有依赖程序到全球npm根目录中。

如果我们希望在本地应用程序的模块目录中包含该包,以便在应用程序中包含一个‘require()’行,您可以键入:

1cd ~/projects/test_package
2npm install express

然而,我们实际上不需要在两个地方安装包和依赖,我们将在下面向您展示如何避免这一点。

删除、删除重复、切割和链接包

由于我们希望这个包在我们的全球和本地范围内,我们需要为它提供一种方式,使这个包在两个地方可用。

首先,让我们卸载我们的本地版本的包,如下:

1npm uninstall express

现在,我们可以告诉 npm 我们希望将我们的全球副本链接到本地包,如下:

1npm link express

这将在我们的node_modules目录中创建一个象征性的链接到我们的全球包,使其在两个地方可用。

我们可以通过卸载全球版本,进入本地包,并链接到全球进行逆转。

首先,卸载本地链接和全球包:

1npm uninstall express       # This removes the symbolic link in local
2npm uninstall -g express    # This removes the actual package in global

重新安装作为本地包:

1npm install express

该包位于我们的本地应用程序目录中(~/projects/test_package/node_modules),但没有在全球范围内安装。

1cd ~/projects/test_package/node_modules/express
2npm link

我们可以使用相同的程序来为我们正在创建的其他包提供自己的test_package (假设它有正确的目录结构和文件,而现在它没有)。

当我们安装和调试我们的包时,我们应该利用dedupe功能。

但是,有些包可能有共享的依赖性. 如果我们的包目录包含两个模块,每个模块都需要一个名为blah的包,它将被安装两次,一次在package1/node_modules/blah和一个在package2/node_modules/blah下。

dedupe子命令寻找这些案例,并将共享依赖提升到一个级别,其中两个包都会找到依赖的单个安装。

例如,我们可以尝试在快递目录中删除我们包的依赖性,我们可以这样做:

1cd ~/projects/test_package/node_modules/express
2npm dedupe

这会找到两个包(mime 和调试)。调试模块实际上也是另一个称为发送的表达模块依赖的依赖。

假设您已经删除了您的包,从而将某些依赖移动向上,但然后您将卸载以前拥有依赖包的包。

在这些情况下,我们可以告诉 npm 将不需要在我们的系统中使用的包``,这意味着在我们的母包依赖性列表中未列出的包。

您可以通过呼叫来消除不必要的依赖:

1npm prune

这将消除不必要的包裹。

查找过时的包和更新它们

如果您需要找出哪些包已过时,您可以通过键入这样的东西来做到这一点:

1npm outdated

1. . .
2Package Current Wanted Latest Location
3type-is 1.1.0 1.1.0 1.2.0 express > type-is
4debug 0.8.0 0.8.0 0.8.1 express > send > debug

它会给你一个图表,显示安装了什么,你的应用程序要求什么,以及它如何与当前版本不同。

如果你想更新你的软件包,你应该编辑该软件包的package.json中所要求的版本,然后发出更新命令:

1npm update

结论

我们已经涵盖了使用 npm 作为包管理器的一些更常见方法,现在您应该对如何获取和管理其他人的包,以便在自己的开发中使用有一个很好的想法。

在我们的下一个 npm 指南中(https://www.digitalocean.com/community/articles/how-to-use-npm-to-build-and-publish-node-js-packages-on-a-linux-server),我们将讨论如何配置 npm 以更改其行为,如何使用 npm 创建包,以及如何发布包并与 npm 网站互动。

By Justin Ellingwood
Published At
Categories with 技术
Tagged with
comments powered by Disqus