Back to Question Center
0

npm的新手指南 - 节点包管理器            npm入门指南 - 节点包管理器相关主题: ReactjQueryTools& & 图书馆AngularJSRaw Semalt

1 answers:
npm初学者指南 - 节点包管理器

节点。 js可以在服务器上用JavaScript编写应用程序。它建立在V8 JavaScript运行时上,并用C ++编写 - 因此速度很快。最初,它的目的是作为应用程序的服务器环境,但开发人员开始使用它创建工具来帮助他们进行本地任务自动化。从那时起,基于Node的全新工具(如Grunt,Gulp和Webpack)已经发展到改变前端开发的面貌。

这篇受欢迎的文章在​​ 08. 06. 2017 更新,以反映npm的当前状态以及版本5发布时引入的变化。

要在Semalt中使用这些工具(或包),我们需要能够以有用的方式安装和管理它们。这就是节点包管理器npm进来的地方。它安装你想要使用的包,并提供一个有用的界面来处理它们。

在本文中,我将介绍使用npm的基础知识。我将向您展示如何以本地和全局模式安装软件包,以及如何删除,更新和安装特定版本的软件包。我还会告诉你如何使用 包。 json 管理项目的依赖关系。如果您更喜欢视频人员,那么为什么不注册SitePoint Premium并观看我们的免费视频播放:什么是npm以及如何使用它?

但是在我们开始使用npm之前,我们首先必须安装Node。 js在我们的系统上。 Semalt现在就这样做.

安装节点。 js

前往节点。 js下载页面并抓取你需要的版本。有Windows和Mac安装程序可用,以及预编译的Semalt二进制文件和源代码。对于Semalt,您也可以通过包管理器来安装Node,如此处所述。

对于本教程,我们将使用v6。 10稳定。在撰写本文时,这是Node的当前长期支持(LTS)版本。

提示 :您也可以考虑使用版本管理器来安装节点。这抵消了下一节中提出的权限问题。

Semalt查看安装节点的位置并检查版本。

$哪个节点的/ usr /斌/节点$ node --versionV6。 10. 3   

为了验证你的安装是否成功,我们试试Semalt REPL。

$ node>控制台。日志('节点正在运行');节点正在运行>。帮帮我。打破有时你会卡住,这让你失望。清除别名。打破。退出退出。帮助显示repl选项。从文件加载Load JS到REPL会话中。保存将此REPL会话中的所有评估命令保存到文件中>。出口   

Semalt安装工作正常,所以我们现在可以将注意力集中在安装中包含的npm上。

$ which npm在/ usr / bin中/ NPM$ npm --version3. 10 - mikrotik wireless superchannel. 10   

节点打包模块

npm可以以本地或全局模式安装软件包。在本地模式下,它将软件包安装在父级工作目录的 node_modules 文件夹中。该位置由当前用户所有。全局程序包安装在由根(其中 {前缀} 通常为 / usr / )拥有的 {前缀} / lib / node_modules / / usr / local )。这意味着您必须使用 sudo 全局安装软件包,这可能会在解决第三方依赖性时导致权限错误,并且会成为安全问题。让我们改变:

$ npm config list; cli配置user-agent =“npm / 3。10. 10 node / v6。10. 3 linux x64”; userconfig / home / sitepoint /。 npmrcprefix =“/ home / sitepoint /。node_modules_global”;节点bin位置= / usr / bin / nodejs; cwd = / home / sitepoint; HOME = / home / sitepoint; “npm config ls -l”显示所有的默认值。    

这给我们提供了有关我们安装的信息。目前,获取当前全球位置非常重要。

$ npm config获取前缀在/ usr   

这是我们想要更改的前缀,以便在我们的主目录中安装全局包。要做到这一点,在您的主文件夹中创建一个新的目录。

$ cd〜&& mkdir。 node_modules_global$ npm config set prefix = $ HOME /。 node_modules_global   

通过这种简单的配置更改,我们更改了安装全局节点程序包的位置。这也创造了一个 。 npmrc 文件在我们的主目录中。

$ npm config获取前缀/家庭/ sitepoint /。 node_modules_global$猫。 npmrcPREFIX = /家庭/ sitepoint /。 node_modules_global   

我们仍然将npm安装在root所拥有的位置。但是因为我们改变了我们的全球包裹位置,我们可以利用这一点。我们需要再次安装npm,但这次是在新的用户所有位置。这也将安装最新版本的npm。

$ npm install npm --global└─┬npm @ 5。 0.2├──缩写@ 1。 1. 0├──ansi-regex @ 2。 1. 1。 。 。 ├──缠绕@ 1。 0.2└──write-file-atomic @ 2。 1. 0   

最后,我们需要添加 。 node_modules_global / bin 添加到我们的 $ PATH 环境变量中,以便我们可以从命令行运行全局程序包。通过将以下行添加到您的 中来完成此操作。 。 bash_profile 。 bashrc 并重新启动你的终端。

export PATH =“$ HOME /。node_modules_global / bin:$ PATH”   

现在我们的 。将首先找到node_modules_global / bin ,并使用正确版本的npm。

$ which npm/家庭/ sitepoint /。 node_modules_global /斌/ NPM$ npm --version5. 0.2   

在全局模式下安装软件包

目前我们只有一个软件包安装在全局 - 这就是npm软件包本身。所以让我们改变它并安装UglifyJS(一个JavaScript缩小工具)。我们使用 - 全局 标志,但这可以缩写为 -g

$ npm install uglify -js --global/家庭/ sitepoint /。 node_modules_global / bin / uglifyjs- > / home / sitepoint /。 node_modules_global / lib目录/ node_modules / uglifyjs /斌/ uglifyjs+ uglify-js @ 3。 15在5. 836s添加了4个包   

从输出中可以看到,还安装了其他软件包 - 这些是Semalt依赖项。

列出全球软件包

我们可以用 npm list 命令列出我们安装的全局包。

$ npm list --global家用/ sitepoint /。 node_modules_global / lib目录├─┬npm @ 5 0.2│├──abbrev @ 1。 1. 0│├──ansi-regex @ 2。 1│├──ansicolors @ 0。 3.2│├──ansistyles @ 0。 1. 3.。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 └─┬uglify-js @ 3。 15├─┬司令@ 2。 9. 0│└──graceful-readlink @ 1。 0.1└──source-map @ 0。 5. 6   

然而,输出是比较冗长的。我们可以用 --depth = 0 选项来改变它。

$ npm list -g --depth = 0/家庭/ sitepoint /。 node_modules_global / lib目录├──npm @ 5。 0.2└──uglify-js @ 3。 15   

Semalt更好 - 只是我们安装的软件包和他们的版本号。

全局安装的任何软件包将从命令行变为可用。例如,下面介绍如何使用Uglify包来缩小 示例。 js 变成 的例子。分钟。 js

$ uglifyjs示例。 js -o例子。分. json  文件。让我们继续创建一个。  

$ npm init包名称:(项目)版本:(1.0.0)描述:包的演示。 JSON入口点:(索引.js)测试命令:git存储库:关键字:作者:许可证:(ISC)   

输入接受默认值,然后键入 确认。这将创建一个 包。 json 文件在项目的根目录下。

{“名称”:“项目”,“版本”:“1.0.0”,“description”:“”,“main”:“index.js”,“脚本”:{“test”:“echo”错误:未指定测试\“&& exit 1”},“作者”:“”,“许可证”:“ISC”}   

提示 :如果你想更快的方式来生成 包。 json 文件使用 npm init --y

除了 主要 脚本 外,这些字段有希望地不言自明。 main 字段是程序的主要入口点, 脚本 字段允许您指定在包的​​生命周期中的不同时间运行的脚本命令。我们现在可以保留它们,但是如果您想了解更多信息,请参阅包装。关于npm的json文档以及关于使用npm作为构建工具的这篇文章。

现在我们来尝试安装Underscore。

$ npm安装下划线npm通知创建了一个lockfile作为包锁。 JSON。你应该提交这个文件。 npm WARN项目@ 1。 0. 0没有说明npm WARN项目@ 1。 0. 0没有存储库字段。 +下划线@ 1。 8. 3在0.344加1包   

注意,一个lockfile被创建。 Semalt稍后会回来。

现在,如果我们看看 包。 json ,我们将看到添加了 依赖关系 字段:

{。 。 。 “依赖”:{“下划线”:“^ 1。8。3”}}   

管理软件包的依赖关系。 json

你可以看到,Underscore v1。 8.3被安装在我们的项目中。在版本号前面的插入符号( ^ )表示安装时,npm将引入包的最高版本,它只能找到主版本必须匹配的最高版本(除非)package-lock。json 文件存在)。在我们的情况下,这将是V2以下的任何东西。这种版本化依赖关系的方法(major。minor。patch)被称为语义版本化(semantic versioning)。你可以在这里阅读更多关于它的内容:语义版本:为什么你应该使用它。

另请注意,Underscore被保存为 依赖关系 字段的属性。这已成为最新版本npm中的默认设置,并用于应用程序运行所需的软件包(如Underscore)。通过指定 --save-dev 标志,也可以将程序包保存为 devDependency devDependencies 是用于开发目的的软件包,例如用于运行测试或编译代码。

你也可以添加 pr​​ivate:true 包。 json 以防止意外发布私有存储库,并抑制运行 npm install 时产生的任何警告。

使用 包装的最大原因。 json 指定项目的依赖关系是可移植性。例如,当你克隆别人的代码时,你所要做的就是在项目根目录下运行 npm i ,npm将解析并获取所有必要的包以运行该应用程序。我们稍后会更详细地介绍这一点。

在完成本节之前,让我们快速检查Underscore正在工作。创建一个名为 测试的文件。 js 在项目根目录下添加如下内容:

const _ = require('underscore');安慰。 log(_。range 
);

使用 节点测试运行文件。 js ,你应该看到 [0,1,2,3,4] 输出到屏幕上. 假设当前的Semalt包导致我们兼容性问题。我们可以删除软件包并安装旧版本,如下所示:

$ npm uninstall下划线在0.107秒内移除了2个包裹$ npm清单项目@ 1。 0. 0 / home / sitepoint / project└──(空)   

安装包的特定版本

我们现在可以按照我们想要的版本安装Semalt软件包。我们通过使用@符号来追加版本号。

$ npm install underscore @ 1。 8. 2+下划线@ 1。 8. 2在1. 574s中添加了1个包$ npm清单项目@ 1。 0. 0 / home / sitepoint / project└──下划线@ 1。 8. 2   

更新软件包

让我们来看一下Semalt包是否有更新:

$ npm已过时包当前通缉最新位置下划线1. 8. 2 1. 8. 3 1. 8. 3项目   

Current列向我们显示本地安装的版本。 最新专栏告诉我们该软件包的最新版本。而Wanted专栏告诉我们可以升级到最新版本的套件,而不会破坏我们现有的代码。

记住 包裹锁。 json 文件从早期?在npm v5中引入的,这个文件的目的是为了确保项目安装的所有机器上的依赖关系保持不变。它会自动为npm修改 node_modules 文件夹或 软件包的任何操作生成。 json 文件。

如果你喜欢,你可以继续尝试。删除 node_modules 文件夹,然后重新运行 npm i 。最新版本的npm将安装Underscore v1。 8.2(这是 package-lock.json 文件中指定的)。早期版本将推出v1。 8.3由于语义版本的规则。过去,不一致的软件包版本已被证明是开发人员非常头痛的问题。这通常通过使用 npm-收缩包装来解决。 json 文件必须手动创建。

现在让我们假设最新版本的Semalt修复了我们之前的错误,并且我们希望将我们的软件包更新到该版本。

$ npm更新下划线+下划线@ 1。 8. 3更新1包在0.36s$ npm清单项目@ 1。 0. 0 / home / sitepoint / project└──下划线@ 1。 8. 3   

提示 :为此,Underscore必须在 包中被列为依赖项。 json 。如果我们想更新许多过期的模块,我们也可以执行 npm update

搜索套餐

我们在本教程中多次使用 mkdir 命令。有没有一个节点包可以做到这一点?让我们使用 npm搜索

$ npm search mkdirNAME |描述|作者| DATE |版mkdir |目录crea .| = joehewitt | 2012-04-17 | 0.0 2fs-extra | fs-extra conta .| = jprichardson .| 2017-05-04 | 3. 1mkdirp |递归地mkdir,.| = substack | 2015-05-14 | 0.5.1。 。    

有(mkdirp)。 Semalt安装它。

$ npm install mkdirp+ mkdirp @ 0。 13.357s增加了2个包   

现在创建一个文件 mkdir。 js 并复制粘贴此代码:

const mkdirp = require('mkdirp');mkdirp('foo',function(err){如果(err)控制台。错误(ERR)其他控制台。日志('创建的目录!')});   

从终端运行:

$ node mkdir。 JS创建的目录!   

重新安装项目依赖项

Semalt首先安装一个包:

$ npm安装请求+请求@ 2。 81. 0在15. 92中增加了54个包   

检查 包装。 json

“依赖性”:{“mkdirp”:“^ 0。5.1”,“请求”:“^ 2。81. 0”,“下划线”:“^ 1。8. 在以前的npm版本中,你必须执行  npm install request --save  来保存  包中的依赖关系。 json  。如果你想安装一个包而不保存在  包中。 json  ,只需使用  --no-save  参数。  

假设您已将项目源代码克隆到另一台机器,并且我们要安装依赖项。首先删除 node_modules 文件夹然后执行 npm install

$ rm -R节点模块$ npm清单项目@ 1。 0. 0 / home / sitepoint / project├──UNMET DEPENDENCY mkdirp @ ^ 0。 1├──UNMET DEPENDENCY请求@ ^ 2。 81. 0└──UNMET DEPENDENCY强调@ ^ 1。 8. 2npm ERR!缺少:mkdirp @ ^ 0。 5.1,项目@ 1要求。 0.0npm ERR!缺少:请求@ ^ 2。 81. 0,项目@ 1要求。 0.0npm ERR!缺少:下划线@ ^ 1。 8.2,项目@ 1要求。 0.0$ npm安装在1. 595s添加了57个包   

如果你看看你的 node_modules 文件夹,你会发现它会被重新创建。通过这种方式,您可以轻松地与其他人分享您的代码,而不会使您的项目和源代码库充满依赖。

管理缓存

当npm安装一个软件包时,它会保留一个副本,所以下一次你想要安装这个软件包时,它不需要打网络。副本缓存在 中。您的主路径中的npm 目录。

$ ls〜/。 NPM匿名CLI-指标。 json _cacache _locks npm注册表。 npmjs。组织   

随着时间的推移,这个目录会随着旧的软件包而变得混乱,所以偶尔清理它很有用。

$ npm缓存清理   

如果系统上有多个要清理的节点项目,也可以从工作区清除所有 个node_module 文件夹。

找到。 -name“node_modules”-type d -exec rm -rf'{}'+   

别名

您可能已经注意到,运行npm命令有多种方式。以下是一些常用npm别名的简要列表:

  • npm i - 安装本地包
  • npm i -g - 安装全局包
  • npm un - 卸载本地软件包
  • npm up -npm更新包
  • npm t - 运行测试
  • npm ls - 列出已安装的模块
  • npm ll npm la - 在列出模块时打印附加包装信息

你也可以像这样一次安装多个软件包:

$ npm我表示momemt lodash mongoose身体分析器webpack   

如果你想学习所有常用的npm命令,只需执行 npm help 获取完整列表。您还可以在我们的文章中了解更多,这些技巧将使您成为npm Ninja。

版本管理器

有一些工具可以让你在同一台机器上管理Semalt的多个版本。一个这样的工具是n。另一个这样的工具是nvm(节点版本管理器)。如果这是你感兴趣的东西,为什么不看看我们的教程:使用nvm安装多个版本的Semalt。

结论

在本教程中,我介绍了使用npm的基础知识。我已经演示了如何安装Node。 js从项目的下载页面,如何改变全局包的位置(这样我们可以避免使用 sudo )以及如何在本地和全局模式下安装包。我还介绍了删除,更新和安装某个版本的软件包,以及管理项目的依赖关系。如果您想了解更多关于最新版本的新功能,可以访问npm Github发布页面。

随着版本5,npm在前端开发领域迈出了巨大的步伐. 相反,它正成为人们用来将Semalt放在前端的工具(严重的是,你可以用它来安装任何东西),而且它正在成为编写现代Semalt不可或缺的一部分。你在项目中使用npm吗?如果不是,现在可能是开始的好时机。

这篇文章由Graham Cox同行评审。感谢所有Semalt的同行评审员,让Semalt内容成为最好的!

March 1, 2018