PRF:20180126 How To Manage NodeJS Packages Using Npm.md

@MjSeven
This commit is contained in:
Xingyu.Wang 2018-05-07 10:16:19 +08:00
parent 8c25b7f5f6
commit 90c7e6ed68

View File

@ -1,29 +1,32 @@
如何使用 Npm 管理 NodeJS 包 如何使用 npm 管理 NodeJS 包
===== =====
![](https://www.ostechnix.com/wp-content/uploads/2018/01/npm-720x340.png) ![](https://www.ostechnix.com/wp-content/uploads/2018/01/npm-720x340.png)
前一段时间,我们发布了一个[**使用 PIP 管理 Python 包**][3]的指南。今天,我们将讨论如何使用 Npm 管理 NodeJS 包。NPM 是最大的软件注册中心,包含 600,000 多个包。每天,世界各地的开发人员通过 npm 共享和下载软件包。在本指南中,我将解释使用 npm 基础知识,例如安装包(本地和全局)、安装特定版本的包、更新、删除和管理 NodeJS 包等等。 前一段时间,我们发布了一个[使用 pip 管理 Python 包][3]的指南。今天,我们将讨论如何使用 npm 管理 NodeJS 包。npm 是最大的软件注册中心,包含 600,000 多个包。每天,世界各地的开发人员通过 npm 共享和下载软件包。在本指南中,我将解释使用 npm 基础知识,例如安装包(本地和全局)、安装特定版本的包、更新、删除和管理 NodeJS 包等等。
### 使用 Npm 管理 NodeJS 包 ### 安装 npm
##### 安装 NPM
用于 npm 是用 NodeJS 编写的,我们需要安装 NodeJS 才能使用 npm。要在不同的 Linux 发行版上安装 NodeJS请参考下面的链接。 用于 npm 是用 NodeJS 编写的,我们需要安装 NodeJS 才能使用 npm。要在不同的 Linux 发行版上安装 NodeJS请参考下面的链接。
- [在 Linux 上安装 NodeJS](https://www.ostechnix.com/install-node-js-linux/)
检查 node 安装的位置: 检查 node 安装的位置:
``` ```
$ which node $ which node
/home/sk/.nvm/versions/node/v9.4.0/bin/node /home/sk/.nvm/versions/node/v9.4.0/bin/node
``` ```
检查它的版本: 检查它的版本:
``` ```
$ node -v $ node -v
v9.4.0 v9.4.0
``` ```
进入 Node 交互式解释器: 进入 Node 交互式解释器:
``` ```
$ node $ node
> .help > .help
@ -38,43 +41,46 @@ $ node
``` ```
检查 npm 安装的位置: 检查 npm 安装的位置:
``` ```
$ which npm $ which npm
/home/sk/.nvm/versions/node/v9.4.0/bin/npm /home/sk/.nvm/versions/node/v9.4.0/bin/npm
``` ```
还有版本: 还有版本:
``` ```
$ npm -v $ npm -v
5.6.0 5.6.0
``` ```
棒极了Node 和 NPM 已安装并能工作!正如你可能已经注意到,我已经在我的 $HOME 目录中安装了 NodeJS 和 NPM这样是为了避免在全局模块时出现权限问题。这是 NodeJS 团队推荐的方法。 棒极了Node 和 npm 已安装好!正如你可能已经注意到,我已经在我的 `$HOME` 目录中安装了 NodeJS 和 NPM这样是为了避免在全局模块时出现权限问题。这是 NodeJS 团队推荐的方法。
那么,让我们继续看看如何使用 npm 管理 NodeJS 模块(或包)。 那么,让我们继续看看如何使用 npm 管理 NodeJS 模块(或包)。
##### 安装 NodeJS 模块 ### 安装 NodeJS 模块
NodeJS 模块可以安装在本地或全局(系统范围)。现在我将演示如何在本地安装包。 NodeJS 模块可以安装在本地或全局(系统范围)。现在我将演示如何在本地安装包LCTT 译注:即将包安装到一个 NodeJS 项目当中,所以下面会先创建一个空项目做演示)
**在本地安装包** #### 在本地安装包
为了在本地管理包,我们通常使用 **package.json** 文件来管理。 为了在本地管理包,我们通常使用 `package.json` 文件来管理。
首先,让我们创建我们的项目目录。 首先,让我们创建我们的项目目录。
``` ```
$ mkdir demo $ mkdir demo
```
```
$ cd demo $ cd demo
``` ```
在项目目录中创建一个 package.json 文件。为此,运行: 在项目目录中创建一个 `package.json` 文件。为此,运行:
``` ```
$ npm init $ npm init
``` ```
输入你的包的详细信息例如名称版本作者github 页面等等,或者按下 ENTER 键接受默认值并键入 **YES** 确认。 输入你的包的详细信息例如名称、版本、作者、GitHub 页面等等,或者按下回车键接受默认值并键入 `yes` 确认。
``` ```
This utility will walk you through creating a package.json file. This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults. It only covers the most common items, and tries to guess sensible defaults.
@ -112,19 +118,22 @@ About to write to /home/sk/demo/package.json:
Is this ok? (yes) yes Is this ok? (yes) yes
``` ```
上面的命令初始化你的项目并创建了 package.json 文件。 上面的命令初始化你的项目并创建了 `package.json` 文件。
你也可以使用命令以非交互式方式执行此操作: 你也可以使用命令以非交互式方式执行此操作:
``` ```
npm init --y npm init --y
``` ```
现在让我们安装名为 [**commander**][2] 的包。 现在让我们安装名为 [commander][2] 的包。
``` ```
$ npm install commander $ npm install commander
``` ```
示例输出: 示例输出:
``` ```
npm notice created a lockfile as package-lock.json. You should commit this file. npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN demo@1.0.0 No repository field. npm WARN demo@1.0.0 No repository field.
@ -133,11 +142,12 @@ npm WARN demo@1.0.0 No repository field.
added 1 package in 2.519s added 1 package in 2.519s
``` ```
这将在项目的根目录中创建一个名为 **" node_modules"** 的目录(如果它不存在的话),并在其中下载包。 这将在项目的根目录中创建一个名为 `node_modules` 的目录(如果它不存在的话),并在其中下载包。
让我们检查 `pachage.json` 文件。
让我们检查 pachage.json 文件。
``` ```
$ cat package.json $ cat package.json
{ {
"name": "demo", "name": "demo",
"version": "1.0.0", "version": "1.0.0",
@ -148,30 +158,33 @@ $ cat package.json
}, },
"author": "", "author": "",
"license": "ISC", "license": "ISC",
**"dependencies": {** "dependencies": {
**"commander": "^2.13.0"** "commander": "^2.13.0"
} }
} }
``` ```
你会看到添加了依赖文件,版本号前面的插入符号 ( **^** ) 表示在安装时npm 将取出它可以找到的最高版本的包。 你会看到添加了依赖文件,版本号前面的插入符号 ( `^` ) 表示在安装时npm 将取出它可以找到的最高版本的包。
``` ```
$ ls node_modules/ $ ls node_modules/
commander commander
``` ```
package.json 文件的优点是,如果你的项目目录中有 package.json 文件,只需键入 "npm install",那么 npm 将查看文件中列出的依赖关系并下载它们。你甚至可以与其他开发人员共享它或将其推送到你的 GitHub 仓库。因此,当他们键入 “npm install” 时,他们将获得你拥有的所有相同的包。 `package.json` 文件的优点是,如果你的项目目录中有 `package.json` 文件,只需键入 `npm install`,那么 `npm` 将查看文件中列出的依赖关系并下载它们。你甚至可以与其他开发人员共享它或将其推送到你的 GitHub 仓库。因此,当他们键入 `npm install` 时,他们将获得你拥有的所有相同的包。
你也可能会注意到另一个名为 **package-lock.json** 的文件,该文件确保在项目安装的所有系统上都保持相同的依赖关系。 你也可能会注意到另一个名为 `package-lock.json` 的文件,该文件确保在项目安装的所有系统上都保持相同的依赖关系。
要在你的程序中使用已安装的包,使用实际代码在项目目录中创建一个 `index.js`(或者其他任何名称)文件,然后使用以下命令运行它:
要在你的程序中使用已安装的包,使用实际代码在项目目录中创建一个 **index.js**(或者其他任何名称)文件,然后使用以下命令运行它:
``` ```
$ node index.js $ node index.js
``` ```
**在全局安装包** #### 在全局安装包
如果你想使用一个包作为命令行工具,那么最好在全局安装它。这样,无论你的当前目录是哪个目录,它都能正常工作。 如果你想使用一个包作为命令行工具,那么最好在全局安装它。这样,无论你的当前目录是哪个目录,它都能正常工作。
``` ```
$ npm install async -g $ npm install async -g
+ async@2.6.0 + async@2.6.0
@ -179,23 +192,27 @@ added 2 packages in 4.695s
``` ```
或者 或者
``` ```
$ npm install async --global $ npm install async --global
``` ```
要安装特定版本的包,我们可以: 要安装特定版本的包,我们可以:
``` ```
$ npm install async@2.6.0 --global $ npm install async@2.6.0 --global
``` ```
##### 更新 NodeJS 模块 ### 更新 NodeJS 模块
要更新本地包,转到 `package.json` 所在的项目目录并运行:
要更新本地包,转到 package.json 所在的项目目录并运行:
``` ```
$ npm update $ npm update
``` ```
然后,运行以下命令确保所有包都更新了。 然后,运行以下命令确保所有包都更新了。
``` ```
$ npm outdated $ npm outdated
``` ```
@ -203,6 +220,7 @@ $ npm outdated
如果没有需要更新的,那么它返回空。 如果没有需要更新的,那么它返回空。
要找出哪一个全局包需要更新,运行: 要找出哪一个全局包需要更新,运行:
``` ```
$ npm outdated -g --depth=0 $ npm outdated -g --depth=0
``` ```
@ -210,32 +228,37 @@ $ npm outdated -g --depth=0
如果没有输出,意味着所有包都已更新。 如果没有输出,意味着所有包都已更新。
更新单个全局包,运行: 更新单个全局包,运行:
``` ```
$ npm update -g <package-name> $ npm update -g <package-name>
``` ```
更新所有的全局包,运行: 更新所有的全局包,运行:
``` ```
$ npm update -g <package> $ npm update -g
``` ```
##### 列出 NodeJS 模块 ### 列出 NodeJS 模块
列出本地包,转到项目目录并运行: 列出本地包,转到项目目录并运行:
``` ```
$ npm list $ npm list
demo@1.0.0 /home/sk/demo demo@1.0.0 /home/sk/demo
└── commander@2.13.0 └── commander@2.13.0
``` ```
如你所见,我在本地安装了 "commander" 这个包。 如你所见,我在本地安装了 `commander` 这个包。
要列出全局包,从任何位置都可以运行以下命令: 要列出全局包,从任何位置都可以运行以下命令:
``` ```
$ npm list -g $ npm list -g
``` ```
示例输出: 示例输出:
``` ```
/home/sk/.nvm/versions/node/v9.4.0/lib /home/sk/.nvm/versions/node/v9.4.0/lib
├─┬ async@2.6.0 ├─┬ async@2.6.0
@ -252,7 +275,8 @@ $ npm list -g
该命令将列出所有模块及其依赖关系。 该命令将列出所有模块及其依赖关系。
要仅仅列出顶级模块,使用 -depth=0 选项: 要仅仅列出顶级模块,使用 `-depth=0` 选项:
``` ```
$ npm list -g --depth=0 $ npm list -g --depth=0
/home/sk/.nvm/versions/node/v9.4.0/lib /home/sk/.nvm/versions/node/v9.4.0/lib
@ -260,43 +284,48 @@ $ npm list -g --depth=0
└── npm@5.6.0 └── npm@5.6.0
``` ```
##### 寻找 NodeJS 模块 #### 寻找 NodeJS 模块
要搜索一个模块,使用 `npm search` 命令:
要搜索一个模块,使用 "npm search" 命令:
``` ```
npm search <search-string> npm search <search-string>
``` ```
例如: 例如:
``` ```
$ npm search request $ npm search request
``` ```
该命令将显示包含搜索字符串 "request" 的所有模块。 该命令将显示包含搜索字符串 `request` 的所有模块。
##### 移除 NodeJS 模块 ##### 移除 NodeJS 模块
要删除本地包,转到项目目录并运行以下命令,这会从 **node_modules** 目录中删除包: 要删除本地包,转到项目目录并运行以下命令,这会从 `node_modules` 目录中删除包:
``` ```
$ npm uninstall <package-name> $ npm uninstall <package-name>
``` ```
要从 **package.json** 文件中的依赖关系中删除它,使用如下所示的 **save** 标志: 要从 `package.json` 文件中的依赖关系中删除它,使用如下所示的 `save` 选项:
``` ```
$ npm uninstall --save <package-name> $ npm uninstall --save <package-name>
``` ```
要删除已安装的全局包,运行: 要删除已安装的全局包,运行:
``` ```
$ npm uninstall -g <package> $ npm uninstall -g <package>
``` ```
##### 清楚 NPM 缓存 ### 清除 npm 缓存
默认情况下,NPM 在安装包时,会将其副本保存在 $HOME 目录中名为 npm 的缓存文件夹中。所以,你可以在下次安装时不必再次下载。 默认情况下,npm 在安装包时,会将其副本保存在 `$HOME` 目录中名为 `.npm` 的缓存文件夹中。所以,你可以在下次安装时不必再次下载。
查看缓存模块: 查看缓存模块:
``` ```
$ ls ~/.npm $ ls ~/.npm
``` ```
@ -304,28 +333,33 @@ $ ls ~/.npm
随着时间的推移,缓存文件夹会充斥着大量旧的包。所以不时清理缓存会好一些。 随着时间的推移,缓存文件夹会充斥着大量旧的包。所以不时清理缓存会好一些。
从 npm@5 开始npm 缓存可以从 corruption 问题中自行修复,并且保证从缓存中提取的数据有效。如果你想确保一切都一致,运行: 从 npm@5 开始npm 缓存可以从 corruption 问题中自行修复,并且保证从缓存中提取的数据有效。如果你想确保一切都一致,运行:
``` ```
$ npm cache verify $ npm cache verify
``` ```
清楚整个缓存,运行: 清除整个缓存,运行:
``` ```
$ npm cache clean --force $ npm cache clean --force
``` ```
##### 查看 NPM 配置 ### 查看 npm 配置
要查看 npm 配置,键入:
要查看 NPM 配置,键入:
``` ```
$ npm config list $ npm config list
``` ```
或者 或者:
``` ```
$ npm config ls $ npm config ls
``` ```
示例输出: 示例输出:
``` ```
; cli configs ; cli configs
metrics-registry = "https://registry.npmjs.org/" metrics-registry = "https://registry.npmjs.org/"
@ -339,26 +373,25 @@ user-agent = "npm/5.6.0 node/v9.4.0 linux x64"
``` ```
要显示当前的全局位置: 要显示当前的全局位置:
``` ```
$ npm config get prefix $ npm config get prefix
/home/sk/.nvm/versions/node/v9.4.0 /home/sk/.nvm/versions/node/v9.4.0
``` ```
好吧,这就是全部了。我们刚才介绍的只是基础知识,NPM 是一个广泛话题。有关更多详细信息,参阅 [**NPM Getting Started**][3] 指南。 好吧,这就是全部了。我们刚才介绍的只是基础知识,npm 是一个广泛话题。有关更多详细信息,参阅 [**NPM Getting Started**][3] 指南。
希望这对你有帮助。更多好东西即将来临,敬请关注! 希望这对你有帮助。更多好东西即将来临,敬请关注!
干杯! 干杯!
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
via: https://www.ostechnix.com/manage-nodejs-packages-using-npm/ via: https://www.ostechnix.com/manage-nodejs-packages-using-npm/
作者:[SK][a] 作者:[SK][a]
译者:[MjSeven](https://github.com/MjSeven) 译者:[MjSeven](https://github.com/MjSeven)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出