介绍
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 网站互动。