致谢

编译自|

作者|Sk

译者|MjSeven共计翻译:35篇贡献时间:96天

前一段时间linux nodejs 安装,我们发布了一个使用pip管理Python包[1]的手册。明天,我们将讨论怎样使用npm管理NodeJS包。npm是最大的软件注册中心,包含600,000多个包。每晚,世界各地的开发人员通过npm共享和下载软件包。在本手册中,我将解释使用npm基础知识,比如安装包(本地和全局)、安装特定版本的包、更新、删除和管理NodeJS包等等。

安装npm

用于npm是用NodeJS编撰的,我们须要安装NodeJS能够使用npm。要在不同的Linux发行版上安装NodeJSlinux内核,请参考下边的链接。

◈在Linux上安装NodeJS[2]

检测node安装的位置:

  1. $ which node

  2. /home/sk/.nvm/versions/node/v9.4.0/bin/node

检测它的版本:

  1. $ node -v

  2. v9.4.0

步入Node交互式例程:

  1. $ node

  2. > .help

  3. .break Sometimes you get stuck, this gets you out

  4. .clear Alias for .break

  5. .editor Enter editor mode

  6. .exit Exit the repl

  7. .help Print this help message

  8. .load Load JS from a file into the REPL session

  9. .save Save all evaluated commands in this REPL session to a file

  10. > .exit

检测npm安装的位置:

  1. $ which npm

  2. /home/sk/.nvm/versions/node/v9.4.0/bin/npm

还有版本:

  1. $ npm -v

  2. 5.6.0

棒极了!Node和npm已安装好!正如你可能早已注意到linux nodejs 安装,我早已在我的$HOME目录中安装了NodeJS和NPM,这样是为了防止在全局模块时出现权限问题。这是NodeJS团队推荐的方式。

这么,让我们继续瞧瞧怎样使用npm管理NodeJS模块(或包)。

安装NodeJS模块

NodeJS模块可以安装在本地或全局(系统范围)。如今我将演示怎么在本地安装包(LCTT评注:正式包安装到一个NodeJS项目当中,所以下边会先创建一个空项目做演示)。

在本地安装包

为了在本地管理包,我们一般使用package.json文件来管理。

首先,让我们创建我们的项目目录。

  1. $ mkdir demo

  2. $ cd demo

在项目目录中创建一个package.json文件。因此linux命令chm,运行:

  1. $ npm init

输入你的包的详尽信息,比如名称、版本、作者、GitHub页面等等,或则按下回车键接受默认值并键入yes确认。

  1. This utility will walk you through creating a package.json file.

  2. It only covers the most common items, and tries to guess sensible defaults.

  3. See `npm help json` for definitive documentation on these fields

  4. and exactly what they do.

  5. Use `npm install ` afterwards to install a package and

  6. save it as a dependency in the package.json file.

  7. Press ^C at any time to quit.

  8. package name: (demo)

  9. version: (1.0.0)

  10. description: demo nodejs app

  11. entry point: (index.js)

  12. test command:

  13. git repository:

  14. keywords:

  15. author:

  16. license: (ISC)

  17. About to write to /home/sk/demo/package.json:

  18. {

  19. "name": "demo",

  20. "version": "1.0.0",

  21. "description": "demo nodejs app",

  22. "main": "index.js",

  23. "scripts": {

  24. "test": "echo "Error: no test specified" && exit 1"

  25. },

  26. "author": "",

  27. "license": "ISC"

  28. }

  29. Is this ok? (yes) yes

里面的命令初始化你的项目并创建了package.json文件。

你也可以使用命令以非交互式方法执行此操作:

  1. npm init --y

如今让我们安装名为commander[3]的包。

  1. $ npm install commander

示例输出:

linux nodejs 安装_linux安装nodejs_linuxnodejs安装

  1. npm notice created a lockfile as package-lock.json. You should commit this file.

  2. npm WARN demo@1.0.0 No repository field.

  3. + commander@2.13.0

  4. added 1 package in 2.519s

这将在项目的根目录中创建一个名为node_modules的目录(假如它不存在的话),并在其中下载包。

让我们检测pachage.json文件。

  1. $ cat package.json

  2. {

  3. "name": "demo",

  4. "version": "1.0.0",

  5. "description": "demo nodejs app",

  6. "main": "index.js",

  7. "scripts": {

  8. "test": "echo "Error: no test specified" && exit 1"

  9. },

  10. "author": "",

  11. "license": "ISC",

  12. "dependencies": {

  13. "commander": "^2.13.0"

  14. }

  15. }

你会看见添加了依赖文件,版本号后面的插入符号(^)表示在安装时,npm将取出它可以找到的最高版本的包。

  1. $ ls node_modules/

  2. commander

package.json文件的优点是,假如你的项目目录中有package.json文件,只需键入npminstall,这么npm将查看文件中列举的依赖关系并下载它们。你甚至可以与其他开发人员共享它或将其推送到你的GitHub库房。因而,当她们键入npminstall时,她们将获得你拥有的所有相同的包。

你也可能会注意到另一个名为package-lock.json的文件,该文件确保在项目安装的所有系统上都保持相同的依赖关系。

要在你的程序中使用已安装的包,使用实际代码在项目目录中创建一个index.js(或则其他任何名称)文件,之后使用以下命令运行它:

  1. $ node index.js

在全局安装包

假如你想使用一个包作为命令行工具,这么最好在全局安装它。这样,无论你的当前目录是那个目录,它都能正常工作。

  1. $ npm install async -g

  2. + async@2.6.0

  3. added 2 packages in 4.695s

或则

  1. $ npm install async --global

要安装特定版本的包,我们可以:

  1. $ npm install async@2.6.0 --global

更新NodeJS模块

linux安装nodejs_linuxnodejs安装_linux nodejs 安装

要更新本地包,转入package.json所在的项目目录并运行:

  1. $ npm update

之后,运行以下命令确保所有包都更新了。

  1. $ npm outdated

若果没有须要更新的,这么它返回空。

要找出哪一个全局包须要更新,运行:

  1. $ npm outdated -g --depth=0

若果没有输出,意味着所有包都已更新。

更新单个全局包,运行:

  1. $ npm update -g <package-name>

更新所有的全局包,运行:

  1. $ npm update -g

列举NodeJS模块

列举本地包,转入项目目录并运行:

  1. $ npm list

  2. demo@1.0.0 /home/sk/demo

  3. └── commander@2.13.0

如你所见,我在本地安装了commander这个包。

要列举全局包,从任何位置都可以运行以下命令:

  1. $ npm list -g

示例输出:

linuxnodejs安装_linux nodejs 安装_linux安装nodejs

  1. /home/sk/.nvm/versions/node/v9.4.0/lib

  2. ├─┬ async@2.6.0

  3. └── lodash@4.17.4

  4. └─┬ npm@5.6.0

  5. ├── abbrev@1.1.1

  6. ├── ansi-regex@3.0.0

  7. ├── ansicolors@0.3.2

  8. ├── ansistyles@0.1.3

  9. ├── aproba@1.2.0

  10. ├── archy@1.0.0

  11. [...]

该命令将列举所有模块及其依赖关系。

要仅仅列举顶尖模块,使用-depth=0选项:

  1. $ npm list -g --depth=0

  2. /home/sk/.nvm/versions/node/v9.4.0/lib

  3. ├── async@2.6.0

  4. └── npm@5.6.0

找寻NodeJS模块

要搜索一个模块,使用npmsearch命令:

  1. npm search <search-string>

比如:

  1. $ npm search request

该命令将显示包含搜索字符串request的所有模块。

移除NodeJS模块

要删掉本地包,转入项目目录并运行以下命令,这会从node_modules目录中删掉包:

  1. $ npm uninstall <package-name>

要从package.json文件中的依赖关系中删掉它,使用如下所示的save选项:

  1. $ npm uninstall --save <package-name>

要删掉已安装的全局包,运行:

  1. $ npm uninstall -g <package>

去除npm缓存

linux nodejs 安装_linuxnodejs安装_linux安装nodejs

默认情况下,npm在安装包时,会将其副本保存在$HOME目录中名为.npm的缓存文件夹中。所以,你可以在上次安装时毋须再度下载。

查看缓存模块:

  1. $ ls ~/.npm

随着时间的推移,缓存文件夹会参杂着大量旧的包。所以不时清除缓存会好一些。

从npm@5开始,npm缓存可以从corruption问题中自行修补,而且保证从缓存中提取的数据有效。假如你想确保一切都一致,运行:

  1. $ npm cache verify

去除整个缓存,运行:

  1. $ npm cache clean --force

查看npm配置

要查看npm配置,键入:

  1. $ npm config list

或则:

  1. $ npm config ls

示例输出:

  1. ; cli configs

  2. metrics-registry = "https://registry.npmjs.org/"

  3. scope = ""

  4. user-agent = "npm/5.6.0 node/v9.4.0 linux x64"

  5. ; node bin location = /home/sk/.nvm/versions/node/v9.4.0/bin/node

  6. ; cwd = /home/sk

  7. ; HOME = /home/sk

  8. ; "npm config ls -l" to show all defaults.

要显示当前的全局位置:

  1. $ npm config get prefix

  2. /home/sk/.nvm/versions/node/v9.4.0

好吧,这就是全部了。我们刚刚介绍的只是基础知识,npm是一个广泛话题。有关更多详尽信息,参阅NPMGettingStarted[1]手册。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复