1.项目包
-
那些被安装到项目的
node_modules
目录中的包,都是项目包 -
项目包又分为两类,分别是:
- 开发依赖包,被记录到
devDependencies
节点中的包,只在开发期间会用到 - 核心依赖包,被记录到
dependencies
节点中的包,在开发期间和项目上线之后都会用到
2.全局包
-
在执行
npm install
命令时,如果提供了-g
参数,则会把包安装为全局包 -
全局包会被安装到
C:\Users\用户目录\AppData\Roaming\npm\node_modules
目录下 -
注意:
- 只有工具性质的包,才有全局安装的必要性。因为它们提供了好用的终端命令
- 判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可
如何判断全局包和项目包
看这个包是如何使用的
1.通过命令行来用的---全局安装的
2.通过require引入之后使用----项目包
可使用npm root -g 查看所有目录下的全局包
3.开发一个属于自己的包
一个规范的包,它的组成结构,必须符合以下 3 点要求:
-
包必须以单独的目录而存在
-
包的顶级目录下要必须包含
package.json
这个包管理配置文件 -
package.json
中必须包含name
,version
,main
这三个属性,分别代表包的名字、版本号、包的入口
1.初始化包的基础结构
-
新建 ayao-tools 文件夹,作为包的根目录
-
在 ayao-tools 文件夹中,新建三个文件
-
package.json
(包管理配置文件) -
index.js
(包的入口文件) -
README.md
(包的说明文档)
2.初始化 package.json
配置文件
打开终端,输入 npm init -y 命令 ,自动创建一个package.json文件
{
"name": "ayao-tools",
"version": "1.0.0",
"description": "提供格式化时间、HTMLEscape相关功能",
"main": "index.js",
"keywords": [
"dateFormat",
"escape"
],
"license": "ISC"
}
3.在 index.js
中写入要实现的功能的方法
例如,写一个格式化事件的方法:
// 包的入口文件 index.js
// 定义格式化时间的函数
function dateFormat (dateStr) {
const dt = new Date(dateStr)
const y = padZero(dt.getFullYear())
const m = padZero(dt.getMonth() + 1)
const d = padZero(dt.getDate())
const hh = padZero(dt.getHours())
const mm = padZero(dt.getMinutes())
const ss = padZero(dt.getSeconds())
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}
// 定义一个补零的函数
function padZero (n) {
return n > 9 ? n : '0' + n
}
// 向外暴露需要的成员
module.exports = {
dateFormat
}
测试代码
const itheima = require('./flightloong-tools/index')
// 格式化时间的代码
const dtStr = itheima.dateFormat(new Date())
console.log(dtStr) // 2020-06-23 01:16:57
4.在 index.js
中定义转义 HTML 的方法
// index.js
// 定义转义 HTML 字符的函数
function htmlEscape(htmlstr) {
return htmlstr.replace(/<|>|"|&/g, match => {
switch (match) {
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
5.在 index.js
中定义还原 HTML 的方法
// 定义还原 HTML 字符的函数
function htmlUnEscape(str) {
return str.replace(/<|>|"|&/g, (match) => {
switch (match) {
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
6.划分不同的模块
-
在 ayao-tools文件夹下创建一个src文件夹
-
将格式化时间的功能,拆分到
src
->dateFormat.js
中 -
将处理
HTML
字符串的功能,拆分到src
->htmlEscape.js
中 -
在
index.js
中,导入两个模块,得到需要向外共享的方法 -
在
index.js
中,使用module.exports
把对应的方法共享出去
7.编写包的说明文档
-
包根目录中的
README.md
文件,是包的使用说明文档。通过它,我们可以事先把包的使用说明,以markdown
的格式写出来,方便用户参考 -
README
文件中具体写什么内容,没有强制性的要求;只要能够清晰地把包的作用、用法、注意事项等描述清楚即可
例:
### 安装
```
npm i flightloong-tools
```### 导入
```js
const itheima = require('./flightloong-tools')
```### 格式化时间
```js
// 调用 dateFormat 对时间进行格式化
const dtStr = itheima.dateFormat(new Date())
// 结果 2020-04-03 17:20:58
console.log(dtStr)
```### 转义 HTML 中的特殊字符
```js
// 带转换的 HTML 字符串
const htmlStr = '<h1 title="abc">这是h1标签<span>123 </span></h1>'
// 调用 htmlEscape 方法进行转换
const str = itheima.htmlEscape(htmlStr)
// 转换的结果 <h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>
console.log(str)
```### 还原 HTML 中的特殊字符
```js
// 待还原的 HTML 字符串
const str2 = itheima.htmlUnEscape(str)
// 输出的结果 <h1 title="abc">这是h1标签<span>123 </span></h1>
console.log(str2)
```### 开源协议
ISC
8.注册 npm
账号
以上文件都准备好了之后就可以注册npm账号把包上传上去了
-
访问 npm
https://www.npmjs.com/ 网站,点击
sign up
按钮,进入注册用户界面 -
填写账号相关的信息:
Full Name
、Public Email
、Username
、Password
-
点击
Create an Account
按钮,注册账号 -
登录邮箱,点击验证链接,进行账号的验证
注册好账号之后,在终端中输入npm login 命令,依次输入用户名,密码,邮箱
9.将包发布到npm上
将终端切换到包的根目录之后,运行 npm publish
命令,即可将包发布到 npm
上(注意:包名不能雷同)
10.删除已发布的包
1.运行 npm unpublish 包名 --force
命令,即可从 npm
删除已发布的包
2.注意事项
-
npm unpublish
命令只能删除 72 小时以内发布的包 -
npm unpublish
删除的包,在 24 小时内不允许重复发布 -
发布包的时候要慎重,尽量不要往
npm
上发布没有意义的包!