致谢
编译自|
作者|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安装的位置:
$ which node
/home/sk/.nvm/versions/node/v9.4.0/bin/node
检测它的版本:
$ node -v
v9.4.0
步入Node交互式例程:
$ node
> .help
.break Sometimes you get stuck, this gets you out
.clear Alias for .break
.editor Enter editor mode
.exit Exit the repl
.help Print this help message
.load Load JS from a file into the REPL session
.save Save all evaluated commands in this REPL session to a file
> .exit
检测npm安装的位置:
$ which npm
/home/sk/.nvm/versions/node/v9.4.0/bin/npm
还有版本:
$ npm -v
5.6.0
棒极了!Node和npm已安装好!正如你可能早已注意到linux nodejs 安装,我早已在我的$HOME目录中安装了NodeJS和NPM,这样是为了防止在全局模块时出现权限问题。这是NodeJS团队推荐的方式。
这么,让我们继续瞧瞧怎样使用npm管理NodeJS模块(或包)。
安装NodeJS模块
NodeJS模块可以安装在本地或全局(系统范围)。如今我将演示怎么在本地安装包(LCTT评注:正式包安装到一个NodeJS项目当中,所以下边会先创建一个空项目做演示)。
在本地安装包
为了在本地管理包,我们一般使用package.json文件来管理。
首先,让我们创建我们的项目目录。
$ mkdir demo
$ cd demo
在项目目录中创建一个package.json文件。因此linux命令chm,运行:
$ npm init
输入你的包的详尽信息,比如名称、版本、作者、GitHub页面等等,或则按下回车键接受默认值并键入yes确认。
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install ` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (demo)
version: (1.0.0)
description: demo nodejs app
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /home/sk/demo/package.json:
{
"name": "demo",
"version": "1.0.0",
"description": "demo nodejs app",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this ok? (yes) yes
里面的命令初始化你的项目并创建了package.json文件。
你也可以使用命令以非交互式方法执行此操作:
npm init --y
如今让我们安装名为commander[3]的包。
$ npm install commander
示例输出:
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN demo@1.0.0 No repository field.
+ commander@2.13.0
added 1 package in 2.519s
这将在项目的根目录中创建一个名为node_modules的目录(假如它不存在的话),并在其中下载包。
让我们检测pachage.json文件。
$ cat package.json
{
"name": "demo",
"version": "1.0.0",
"description": "demo nodejs app",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"commander": "^2.13.0"
}
}
你会看见添加了依赖文件,版本号后面的插入符号(^)表示在安装时,npm将取出它可以找到的最高版本的包。
$ ls node_modules/
commander
package.json文件的优点是,假如你的项目目录中有package.json文件,只需键入npminstall,这么npm将查看文件中列举的依赖关系并下载它们。你甚至可以与其他开发人员共享它或将其推送到你的GitHub库房。因而,当她们键入npminstall时,她们将获得你拥有的所有相同的包。
你也可能会注意到另一个名为package-lock.json的文件,该文件确保在项目安装的所有系统上都保持相同的依赖关系。
要在你的程序中使用已安装的包,使用实际代码在项目目录中创建一个index.js(或则其他任何名称)文件,之后使用以下命令运行它:
$ node index.js
在全局安装包
假如你想使用一个包作为命令行工具,这么最好在全局安装它。这样,无论你的当前目录是那个目录,它都能正常工作。
$ npm install async -g
+ async@2.6.0
added 2 packages in 4.695s
或则
$ npm install async --global
要安装特定版本的包,我们可以:
$ npm install async@2.6.0 --global
更新NodeJS模块
要更新本地包,转入package.json所在的项目目录并运行:
$ npm update
之后,运行以下命令确保所有包都更新了。
$ npm outdated
若果没有须要更新的,这么它返回空。
要找出哪一个全局包须要更新,运行:
$ npm outdated -g --depth=0
若果没有输出,意味着所有包都已更新。
更新单个全局包,运行:
$ npm update -g <package-name>
更新所有的全局包,运行:
$ npm update -g
列举NodeJS模块
列举本地包,转入项目目录并运行:
$ npm list
demo@1.0.0 /home/sk/demo
└── commander@2.13.0
如你所见,我在本地安装了commander这个包。
要列举全局包,从任何位置都可以运行以下命令:
$ npm list -g
示例输出:
/home/sk/.nvm/versions/node/v9.4.0/lib
├─┬ async@2.6.0
│ └── lodash@4.17.4
└─┬ npm@5.6.0
├── abbrev@1.1.1
├── ansi-regex@3.0.0
├── ansicolors@0.3.2
├── ansistyles@0.1.3
├── aproba@1.2.0
├── archy@1.0.0
[...]
该命令将列举所有模块及其依赖关系。
要仅仅列举顶尖模块,使用-depth=0选项:
$ npm list -g --depth=0
/home/sk/.nvm/versions/node/v9.4.0/lib
├── async@2.6.0
└── npm@5.6.0
找寻NodeJS模块
要搜索一个模块,使用npmsearch命令:
npm search <search-string>
比如:
$ npm search request
该命令将显示包含搜索字符串request的所有模块。
移除NodeJS模块
要删掉本地包,转入项目目录并运行以下命令,这会从node_modules目录中删掉包:
$ npm uninstall <package-name>
要从package.json文件中的依赖关系中删掉它,使用如下所示的save选项:
$ npm uninstall --save <package-name>
要删掉已安装的全局包,运行:
$ npm uninstall -g <package>
去除npm缓存
默认情况下,npm在安装包时,会将其副本保存在$HOME目录中名为.npm的缓存文件夹中。所以,你可以在上次安装时毋须再度下载。
查看缓存模块:
$ ls ~/.npm
随着时间的推移,缓存文件夹会参杂着大量旧的包。所以不时清除缓存会好一些。
从npm@5开始,npm缓存可以从corruption问题中自行修补,而且保证从缓存中提取的数据有效。假如你想确保一切都一致,运行:
$ npm cache verify
去除整个缓存,运行:
$ npm cache clean --force
查看npm配置
要查看npm配置,键入:
$ npm config list
或则:
$ npm config ls
示例输出:
; cli configs
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/5.6.0 node/v9.4.0 linux x64"
; node bin location = /home/sk/.nvm/versions/node/v9.4.0/bin/node
; cwd = /home/sk
; HOME = /home/sk
; "npm config ls -l" to show all defaults.
要显示当前的全局位置:
$ npm config get prefix
/home/sk/.nvm/versions/node/v9.4.0
好吧,这就是全部了。我们刚刚介绍的只是基础知识,npm是一个广泛话题。有关更多详尽信息,参阅NPMGettingStarted[1]手册。