【NPM】NPM包的发布与管理
摘要:
在使用Hexo
的过程中,会需要优化主题的显示,来达到自己想要的一个效果,Hexo
有强大的插件系统,开发者能轻松扩展功能而不用修改核心模块的源码。在Hexo
中有两种形式的插件:脚本(Scripts)和插件(Packages),我可能更倾向于使用插件,这种方式对源码的改动方式应该是最小的了,而本文主要就是先介绍最基础的npm
包的发布和管理。
1.npm
介绍
npm is the world's largest software registry. Open source developers from every continent use npm to share and borrow packages, and many organizations use npm to manage private development as well.
官网是这样介绍npm
的,翻译过来就是,npm
是世界上最大的软件注册中心。来自各个大洲的开源开发者都使用npm
来共享和借用包,许多组织也使用npm
来管理私人开发。简单来说,npm
就是javascript
的包管理工具,类似python
的pip
。npm
是和Node.js
一起发布的,只要安装了Node.js
,npm
也默认会被安装。
那么npm
可以用用来干什么呢?
- 为你的应用调整代码包,或者合并它们。
- 下载可以立即使用的独立工具。
- 运行包而不使用
npx
下载。 - 与任何地方的任何
npm
用户共享代码。 - 将代码限制给特定的开发人员。
- 创建组织来协调包维护、编码和开发人员。
- 使用组织形式组建虚拟团队。
- 管理多个版本的代码和代码依赖关系。
- 当底层代码更新时,可以轻松地更新应用程序。
- 发现解决同一难题的多种方法。
- 找到其他正在处理类似问题和项目的开发人员。
2.npm
的基本使用
2.1注册账号
这个没什么可写的,进入官网,点击Sign Up
按照提示进行注册即可,注册还是很简单的,注册完毕之后要记得会提示验证邮箱,这个时候注意验证就好了,不验证的话可能会有问题。
2.2npm
安装与更新
上边已经有所提及,npm
和Node.js
是一起发布的,只要安装了Node.js
,npm
也是自动安装了的。
- 查看
npm
和Node.js
版本
1 | node -v # 查看node版本 |
- 更新
npm
版本
1 | npm install npm@latest -g |
2.3npm
管理插件
- 安装插件
1 | npm install packageName # 本地安装,安装到项目目录下,不在package.json中写入依赖 |
可以通过以上命令来对插件进行安装,还有一种就是自己按照相应的语法写一个package.json
文件,然后在该文件所在目录执行npm install
即可安装package.json
文件中的所有插件。
我一般还是只在Hexo
中使用该命令,所以npm install packageName --save
命令使用的较多,另外就是npm 5
之后版本默认会修改package.json
,不再需要--save
参数,也就是说,就算现在去掉该参数,再通过npm install
命令依然可以安装相应插件。更多内容可以这里:npm-install
- 卸载插件
1 | npm uninstall packageName # 删除packageName模块 |
- 更新插件
1 | 更新一个或多个模块,加上-g参数,表示更新全局的模块 |
2.4npm
项目初始化
由于我是针对hexo
插件来使用npm
,所以文件夹命名按照hexo
的插件要求命名,hexo
要求插件文件夹名称开头必须为 hexo-
,如此一来 hexo
才会在启动时载入否则 hexo
将会忽略它。
- 创建文件夹
1 | 进入自己相应的文件夹,并创建npm项目文件夹 |
- 初始化文件夹
1 | npm init |
使用该命令初始化时,会打开项目初始化向导,在命令行窗口会提示让自己输入各个参数,所有显示信息如下所示:
1 | npm init |
该命令有一个参数--yes
,若使用以下命令,则创建默认package.json
文件,不需要自己在命令行输入,后续直接修改该文件即可。
1 | npm init --yes |
创建的文件信息如下,内容与不带参数创建的一致,看个人喜好选择要不要带参数吧。
1 | { |
package.json
参数解读
参数 | 说明 |
name | 项目的名称。 |
version | 项目的版本,默认是从V1.0.0开始,可以自己修改,遵守“大版本.次要版本.小版本”的格式。 |
scripts |
指定了运行脚本命令的npm命令行缩写; 例如:"test": "tap test/*.js" 就表示执行npm run test的时候所要执行的命令为 tap test/*.js 。 |
bin |
指定各个内部命令对应的可执行文件的位置。 |
main | 指定加载的入口文件,require('moduleName')就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。 |
author | 项目的作者。 |
repository | 项目代码存放地方类型,如:git或svn。 |
keywords | 项目关键字。 |
description | 项目简介,字符串,方便在npm search中搜索。 |
license | 许可证。 |
dependencies |
dependencies字段指定了项目运行所依赖的模块;devDependencies指定项目开发所需要的模块。 它们都指向一个对象,该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。 |
devDependencies |
dependencies
和devDependencies
对应的版本可以加上各种限定,主要有以下几种:
指定版本:比如1.2.2
,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
波浪号(tilde)+指定版本:比如~1.2.2
,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
latest:安装最新版本。
2.5npm
项目发布与管理
2.5.1检查npm
源
这里为什么需要这一步呢,是因为有的时候自己可能为了让下载速度更快,就把源给换成了taobao
,这个源在首次登录的时候可能会有问题,需要处理一下。
1 | 检查npm源 |
2.5.2本地登录npm
首次发布项目,需要登陆npm
,使用以下命令登录,输入命令之后,填写自己的用户名,密码和注册的邮箱即可,这里要注意淘宝镜像只是提供下载,如果要登陆发布自己的项目, 必须要切换到官方npm
源。
1 | 更换npm源为官方源 |
如果不换回官方npm
源的话,登陆的时候就会一直卡死,更换后我出现过因为网络问题导致报错了的,这种的问题不大,出现以下提示说明登陆成功。
1 | Logged in as qidaink on https://registry.npmjs.org/. |
2.5.3发布项目
若项目已经编写完成,那我们就可以发布自己的项目啦,版本发布命令如下。
1 | npm publish |
出现以下提示内容代表发布成功,之前验证完邮箱,这里还会有发布成功的邮件提醒。
1 | npm notice |
2.5.4更新本地项目版本并发布
- 手动修改
手动修改package.json
文件中的版本号。
1 | "version": "1.0.0" |
- 命令修改
1 | npm version patch |
以上命令可以在之前的版本上自动加1
,运行完毕后,会出现更新版本的版本号。
- 发布新版本
1 | npm publish |
通过该命令就可以发布新的版本到自己的npm
仓库中去,而且之前的版本也存在,也可以通过npm
进行安装。
2.5.5撤销版本的发布
若是我们版本发布错误,我们应该如何撤回已经发布的版本呢?可以通过以下命令进行项目的删除或者某一版本的删除。
1 | npm unpublish packageName --force # 强制撤销,可以删除整个项目 |
如下例子,输入版本撤销命令后,会显示撤销的版本,前边会有一个-
,说明撤销成功,此时查看npm
会发现,该版本已经消失。不过这样的话,若撤销的版本是新版本,通过命令更新版本的时候,会跳过撤销的版本直接进入下一个版本。
1 | npm unpublish hexo-npm-test@1.0.1 |
2.5.6查看版本信息
1 | npm view packageName versions # 查看历史版本信息(最多只能显示100条) |