node.js|如何就一个人可以发个包到npm
1.什么是包?
Node.js
的第三方模块又叫做包,不像自定义模块和内置模块,包是由第三方就个人或者是一个团队研发的,免费且开源。npm网站:npm。
2.下载和使用npm包
现在只要下载 node.js 就会附带安装 npm ,可以在终端执行 npm -v 来查询自己安装的 npm 包版本。
//项目中安装包的命令
npm install 包名或者npm i 包名
//安装指定版本包
npm i 包名@版本号
//安装多个包
npm i 包名1 包名2
3.初次装包完成后新增的
node_modules
和 pageage-lock.json作用
- node_modules 文件夹用来存放所有已安装到项目中的包,require()来导入第三方包时,就是以这个目录中查找并加载包的。
package-lock.json
配置文件用来记录node_modules
目录下的每一个包的下载信息,比如包的名字、版本号、下载地址等。
npm有个不成文规定,必须提供一个 package.json 的包管理配置文件,用来纪录一些和项目有关的一些配置信息等。例如:
- 项目的名称,版本号以及描述
- 项目中都用到了哪些包
- 哪些包旨在开发时期被用到
- 哪些包在开发和部署期间都会被用到
- 一个规范的包,它的组成结构,必须符合以下 3 点要求:
- 包必须以单独的目录而存在
- 包的顶级目录下要必须包含
package.json
这个包管理配置文件 package.json
中必须包含name
,version
,main
这三个属性,分别代表包的名字、版本号、包的入口
5. 快速创建 package.json
npm
包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建 package.json
这个包管理配置文件npm init -y
- 注意:上述命令只能在英文目录下才能被运行,当运行 npm install 命令安装包时,npm包管理工具会自动把包的名称和版本号,记录到
package.json
中
文章图片
6.一次性安装所有的包
- 如果要拿到一个剔除了 node_modules 的项目之后,需要把所有的包下载到项目中才能将项目运行,否则会报Error: Cannot find module 'moment'的错。
- 我们可以通过
npm install 或者 npm i//一次性安装所有依赖包
当我们在npm中成功创建包后,通过
npm uninstall 包名
来卸载指定的包,执行成功后,会把卸载掉包,自动从 package.json 的 dependencies 中移除。
8. 解决包下载慢问题
我们使用的npm是默认为国外的npm服务器,网络数据的传输又需要经过漫长的海底光缆,所以下载会很慢。
- 淘宝在国内搭建了一个服务器,专门把国外官方服务器上的包同步到国内的服务器,然后在国内提供下包的服务。从而极大的提高了下包的速度
- 镜像是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像
//查看当前下包镜像源
npm config get registry
//将下包的镜像源切换为淘宝镜像源
npm config set registry=https://registry.npm.taobao.org/
//检查镜像源是否被下载成功
npm config get registry
使用 nrm 切换下载包的服务器
//通过 npm 包管理器,将 nrm 安装为全局可用的工具
npm i nrm -g
//查看所有可用的镜像源
nrm ls
//将下包的镜像源切换为taobao镜像
nrm use taobao
9.包的分类
- 通过命令行来用 ---全局安装
- 通过require引入之后使用 ---项目包
- 开发依赖包:被记录到
devDependencies
节点中的包,只在开发期间会用到 - 核心依赖包:被记录到
dependencies
节点中的包,在开发期间和项目上线之后都会用到npm i 包名 -D//开发依赖包 npm i 包名//核心依赖包
- 在执行
npm install
命令时,如果提供了-g
参数,则会把包安装为全局包
- 全局包会被安装到
C:\Users\用户目录\AppData\Roaming\npm\node_modules
目录下
- 注意:只有工具性质的包,才有全局安装的必要性,因为它们提供了好用的终端命令
npm i 包名 -g//全局安装指定的包 npm uninstall 包名 -g //卸载全局的包
确认自己要实现的功能,如格式化时间等,可参考day.js.
11.初始化包基础结构
- 新建
itheima-tools
文件夹,作为包的根目录
- 在
itheima-tools
文件夹中,新建如下三个文件:
package.json
(包管理配置文件)index.js
(包的入口文件)README.md
(包的说明文档)
package.json
配置文件{
"name": "flightloong-tools",//创建包名先看npm中是否有重名
"version": "1.0.0",//版本号只能比之前越大不能越小
"description": "提供格式化时间、HTMLEscape相关功能",
"main": "index.js",//在导入一个文件的时候,如果没有指定一个特定的文件,但是却能够得到某个包的返回内容,这是因为 Node 在使用 require 导入某个路径的时候,发现没有具体的文件,就会看这个路径下查看是否有 package.json 这个文件,如果有,则查看是否有 main 这个属性,如果有,则指定 main 属性对应的文件作为要执行的文件
"keywords": [
"itcast",
"itheima",
"dateFormat",
"escape"
],
"license": "ISC" //开源协议
}
13.编写包的说明文档
- 包根目录中的README.md文件是包的使用说明文档,通过它我们能够把包的使用说明事先声明,方便用户参考,没有具体规范的要求,能清楚把包作用和用法注意事项说明即可。
- 所创建的包中可包含:
- 安装方式
- 导入方式
- 具体功能
- 开源协议
- 依次输入用户名,密码和邮箱即可登录
- 在运行
npm login
命令之前,必须先把下包的服务器地址切换为npm
的官方服务器。否则会导致发布包失败! - 终端切换到包的根目录后,把包发布到npm上,运行
npm publish
即可将包发布到npm上(注意:包名不能雷同)
npm unpublish 包名 --force
注意:
npm unpublish
删除的包,在 24 小时内不允许重复发布- 发布包的时候要慎重,尽量不要往
npm
上发布没有意义的包
推荐阅读
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 爱就是希望你好好活着
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- 烦恼和幸福
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 活着就是生命的全部意义