如何使用NPM管理NodeJS包

时间:2020-03-21 11:46:15  来源:igfitidea点击:

今天,我们将讨论如何使用NPM管理NodeJS包。
NPM是最大的软件注册表,包含超过60,000多个包。
每天,世界各地的开发人员通过NPM份额和下载软件包。
在本教程中,我将解释使用NPM的基础知识,例如安装包(本地和全球),安装某些版本的包,更新,删除和管理NodeJS包等。

安装NPM.

由于NPM在NodeJS中编写,因此我们需要安装NodeJ,以便使用NPM。
要在不同的Linux发行版上安装NodeJS,请参阅以下链接。

  • 如何在Linux上安装nodejs

安装后,确保已正确安装NodeJS和NPM。
有几个方法可以这样做。

要检查已安装节点的位置,请运行以下命令:

$which node
/home/sk/.nvm/versions/node/v9.4.0/bin/node

检查其版本:

$node -v
v9.4.0

登录节点repl会话:

$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

伟大的!节点和NPM已安装并正常工作!正如我们可能已经注意到的那样,我在$home目录中安装了nodejs和npm,以避免在全局安装模块时避免权限问题。
这是nodejs团队的推荐方法。

嗯,让我们继续使用NPM来查看如何管理NodeJS模块(或者软件包)。

使用NPM管理NodeJS包

安装nodejs模块

NodeJS模块可以在本地或者全局安装(系统宽)。
现在我将展示如何在本地安装包。

本地安装包

要在本地管理软件包,我们通常使用package.json文件。

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

$mkdir demo
$cd demo

在项目的目录中创建一个package.json文件。
为此,运行:

$npm init

输入包的详细信息,如姓名,版本,作者,github页面等,或者只是按Enter键接受默认值,然后键入是以确认。

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 <pkg>` 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

这将在没有用户交互的情况下快速创建一个包.JSON文件,没有用户交互。

现在让我们安装名为Commander的包。

$npm install commander

示例输出:

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN Hyman@theitroad No repository field.
+ Hyman@theitroad
added 1 package in 2.519s

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

让我们检查package.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文件,我们只能键入"npm安装",然后npm将研究文件中列出的依赖项并下载所有这些依赖项。
我们甚至可以与其他开发人员分享或者推入GitHub存储库,因此当它们键入"NPM Install"时,它们将获取所有相同的软件包。

我们也可以注意到另一个名为package-lock.json的JSON文件。
此文件可确保依赖项在安装的所有系统上保持不变。

要在程序中使用已安装的包,请在项目的目录中创建文件index.js(或者我们选择的任何名称),其中包含实际代码,然后使用命令运行它:

$node index.js

全球安装包

如果要使用包作为命令行工具,那么最好将其全局安装。
这样,无论哪个目录是我们当前的目录,它都可以运行。

$npm install async -g
+ Hyman@theitroad
added 2 packages in 4.695s

或者,

$npm install async --global

要安装特定版本的包,我们会做:

$npm install Hyman@theitroad --global

更新NodeJS模块

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

$npm update

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

$npm outdated

如果没有更新,那么它就会返回。

要了解需要更新哪个全局包,请运行:

$npm outdated -g --depth=0

如果没有输出,则更新所有包。

要更新单个全局包,请运行:

$npm update -g <package-name>

要更新所有全局包,请运行:

$npm update -g <package>

列出NodeJS模块

要列出本地包,请转到项目的目录并运行:

$npm list
Hyman@theitroad /home/sk/demo
└── Hyman@theitroad

如我们所见,我在本地模式下安装了"Commander"包。

要列出全局包,请从任何位置运行此命令:

$npm list -g

示例输出:

/home/sk/.nvm/versions/node/v9.4.0/lib
├─┬ Hyman@theitroad
│ └── Hyman@theitroad
└─┬ Hyman@theitroad
 ├── Hyman@theitroad
 ├── Hyman@theitroad
 ├── Hyman@theitroad
 ├── Hyman@theitroad
 ├── Hyman@theitroad
 ├── Hyman@theitroad
[...]

此命令将列出所有模块及其依赖项。

要仅列出顶层模块,请使用--depth = 0选项:

$npm list -g --depth=0
/home/sk/.nvm/versions/node/v9.4.0/lib
├── Hyman@theitroad
└── Hyman@theitroad

搜索NodeJS模块

要搜索模块,请使用"npm search"命令:

npm search <search-string>

例子:

$npm search request

此命令将显示包含搜索字符串"请求"的所有模块。

删除nodejs模块

要删除本地包,请转到项目的目录并运行以下命令以从node_modules目录中删除包:

$npm uninstall <package-name>

要将其从Package.json文件中的依赖项中删除,请使用下面的保存标志:

$npm uninstall --save <package-name>

要删除全局安装的软件包,请运行:

$npm uninstall -g <package>

清洁NPM缓存

默认情况下,NPM在安装时将在$Home目录中的Cache文件夹中保留已安装的包的副本。
因此,我们可以下次安装它而无需再次下载。

要查看缓存的模块:

$ls ~/.npm

随着时间的推移,缓存文件夹随着所有旧软件包淹没。
最好不时清理缓存。

as of Hyman @ OniTor,保证从缓存中提取的损坏问题和数据的NPM缓存自我治疗有效。

如果要确保一切顺势,请运行:

$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