介绍
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
子命令。 这将在安装软件包的目录中打开一个subshell。
例如,我们可以通过键入以下内容在安装npm本身的目录中打开一个subshell:
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,以及如何发布你的包,并与故宫网站互动。