如何使用NPM在Linux服务器上管理Node.js的包

Node.js的是一个流行的JavaScript平台的服务器端编程,允许你建立和运行Web快速应用程序。在本指南中,我们将讨论如何使用NPM来获取有关环境的信息,搜索的包,并在服务器上安装节点程序包。

介绍

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

在本指南中,我们将讨论如何使用npm ,使Node.js的包管理系统,在服务器上管理Node.js的包。 使用此实用程序,您可以轻松满足应用程序依赖性,搜索包和管理安装。

我们假设你有两个的Node.js和npm安装。 你可以按照上面的指南,使它们在Ubuntu 14.04上运行。 我建议使用nvm覆盖该教程方法。

如果你只是想快速开始,你还可以在Ubuntu 14.04的存储库中找到这些软件包,并通过键入以下命令安装它们:

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

熟悉npm

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

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

你可以通过键入:

npm completion >> ~/.bashrc

现在,只需提供配置文件,重新读取刚刚添加的新更改:

source ~/.bashrc

现在,故宫应该能够通过点击自动完成其命令[TAB]键。

为了使自己定位,最好的办法是熟悉npm提供的帮助功能。 要了解npm中可用的子命令,您可以键入:

npm help

Usage: npm <command>

where <command> is one of:
    add-user, adduser, apihelp, author, bin, bugs, c, cache,
    completion, config, ddp, dedupe, deprecate, docs, edit,
    explore, faq, find, find-dupes, get, help, help-search,
. . .

要获得这些子命令的含义的简要摘要,您可以键入:

npm -l

Usage: npm <command>

where <command> is one of:

    adduser     npm adduser
                Then enter stuff at the prompts

    bin         npm bin
                npm bin -g
                (just prints the bin folder)
. . .

您可以使用以下格式获得对这些命令的更全面的概述:

npm help subcommand

这将为所需的子命令创建一个单独的手册页。

如果您不知道哪个命令涵盖了您希望执行的操作,您还可以使用以下类似内容在帮助主题中进行搜索:

npm help-search search_term

查找有关您的系统的信息

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

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

本地vs全局包

创建Node.js应用程序时,您将创建一个目录结构来保存您的应用程序。 在该项目的目录,将有一个名为的子目录node_modules 这个拥有所有你能为你的项目在本地安装的模块。

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

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

通过使用规则的Javascript本地安装可以在你的项目中使用的模块require()方法。 这是你需要大多数时间一个包。

如果你需要使用包的命令行功能,你应该在全球安装它。 在全球范围内安装的应用程序保存在~/.npm/目录下。 他们的命令行功能将可用于所有的Node.js应用程序。 在全球范围内安装的软件包不能使用JavaScript中使用require()虽然。

知道这一点,你可以看到我们将如何具有与每个特定类型的包相关联的功能。 默认情况下,大多数NPM命令会认为你在谈论本地套餐,除非你通过-g--global标志。

在我们的系统上安装列出软件包

现在你知道本地和全局包之间的区别,我们可以继续。 因此,要列出(本地安装)Node.js加载在我们可用的软件包test_package目录,我们可以输入:

npm ls

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

因为我们还没有为我们的应用程序安装任何Node.js包,所以显示为空。

但是,npm会自动安装一些软件包。 让我们通过-g标志上看到:

npm ls -g

/home/demouser/.nvm/v0.11.13/lib
└─┬ npm@1.4.9
  ├── abbrev@1.0.4
  ├── ansi@0.2.1
  ├── ansicolors@0.3.2
  ├── ansistyles@0.1.3
  ├── archy@0.0.2
. . .

正如你所看到的,有很多全局包。 它们以依赖树格式显示。

还有一些其他选项可用于修改输出。 您可以使用-l或者-a标志以获得更多信息。 您可以通过JSON可选传递查看这些信息--json标志。

查询其他信息

除了简单地询问npm关于安装的软件包,我们可以询问关于它的环境的一些其他信息。

我们可以通过键入以下内容看到npm指向作为本地包层次结构中的根模块目录:

npm root

/home/demouser/projects/test_package/node_modules

你可以得到你使用劳动包装上的顶级路径prefix子命令:

npm prefix

/home/demouser/projects/test_package

这些也可以与所使用的-g标志,以查看那里的全球文件存储。

要看到故宫将安装可执行文件,你可以找到bin当前项目目录:

npm bin

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

探索软件包的文件

在安装包,其中要快速进入目录的位置,实际上你可以只使用explore子命令。 这将在安装软件包的目录中打开一个subshel​​l。

例如,我们可以通过键入以下内容在安装npm本身的目录中打开一个subshel​​l:

npm explore -g npm

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

您可以操纵或探索此目录中的文件,然后退出子shell以返回之前的操作。

exit

使用npm作为包管理器

到目前为止,我们已经涵盖了很多地方,但我们已经掌握了npm的主要功能。 人们使用npm的主要原因是它的包管理功能。

搜索和安装软件包

当你需要一个Node.js包时,你可以使用npm来搜索它。 让我们假设我们将需要的express包裹为我们的项目。 Express是一个Web框架。

我们可以搜索这个包在NPM包文件,它位于故宫网站

npm search express

这将返回一个非常长的列表,因为express是一个非常受欢迎的包。 你可以管到这一点像寻呼机less ,查看更方便。 我们还可以使用正则表达式(带有一些有趣的字符来转义shell解释),如下所示:

npm search /^express\[\ \]

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

如果你得到太多的结果,可能更容易只是去npm网站看看确切的包称为。

当您知道包的名称时,可以安装它。 由于我们需要快速的命令行功能,我们将在全局安装:

npm install -g express

这将下载并安装快速包及其所有依赖项到全局npm根目录。

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

cd ~/projects/test_package
npm install express

我们实际上不需要在这两个地方安装包和依赖关系,我们将告诉你如何避免这一点。

卸载,删除重复,修剪和链接包

因为我们想要在全局和本地范围内使用这个包,所以我们需要为它提供在两个地方都有这个包的方法。

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

npm uninstall express

现在,我们可以告诉npm我们想要将我们的全局副本链接到本地​​包,像这样:

npm link express

这将创建的符号链接node_modules目录到我们的全球封装,使得它在这两个地方可用。

我们可以通过卸载全局版本,进入本地包和全局链接来完成相反的操作。 我们可以这样做。

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

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

以本地软件包重新安装软件包:

npm install express

该软件包是在我们的本地应用程序目录( ~/projects/test_package/node_modules ),而不是全球的装机量。 我们可以将其全局链接到包目录并调用link子命令,没有其他参数:

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

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

当我们安装和洗牌周围包裹我们,我们应该采取的优势dedupe功能。

我们的软件包在层次结构中在它们下安装了依赖项。 但是,一些软件包可能具有共享依赖关系。 如果我们的包目录包含两个模块,每个需要一个所谓的“嗒嗒”包,它将被安装两次,一次在“包1 /节点模块/嗒嗒”,一个在“程序包/节点模块/嗒嗒”。

dedupe子命令查找这些案件和移动共享依赖一个级别,其中两个包会发现依赖的单一安装。

例如,我们可以尝试在express目录中重复数据删除我们的包的依赖。 我们可以在包目录中这样做:

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

这将找到两个包(mime和调试)。 调试模块实际上也是另一个名为“send”的express模块​​依赖性的依赖。 这通常会进行重复数据删除,但是存在版本冲突,因此在此实例中不进行任何操作。

让我们说,你已经重新分配了你的包,向上移动一些依赖,但是你卸载以前拥有依赖包的包。 依赖项不会被删除,因为它不再在packages子目录中。

在这些情况下,我们可以告诉npm“修剪”系统中不需要的软件包。 这意味着在父包的依赖关系列表中没有列出的包。

您可以通过调用以下操作来删除不需要的依赖项:

npm prune

这将删除不需要的包。

查找过期包和更新它们

如果你需要知道哪些包过期,你可以这样输入:

npm outdated

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

这将给你一个包含更新的最新版本的软件包列表。 它会给你一个图表,显示安装的是什么,你的应用程序请求,以及如何与当前版本不同。

如果你想更新你的包,你应该在编辑包的请求的版本package.json ,然后发出更新命令:

npm update

结论

我们已经介绍了一些更常见的使用npm作为包管理器的方法。 您现在应该知道如何获取和管理其他人的包以用于您自己的开发。

在我们的下一个故宫导游 ,我们就去了如何NPM配置以改变其行为,如何建立封装,NPM,以及如何发布你的包,并与故宫网站互动。

作者:Justin Ellingwood