发布自己的第一个npm包

634 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

前言

前端模块化作为前端必备的一个技能,已经在前端开发中不可或缺;而模块化带来项目的规模不断变大,项目的依赖越来越多;随着项目的增多,如果每个模块都通过手动拷贝的方式无异于饮鸩止渴,我们可以把功能相似的模块或组件抽取到一个npm包中;然后上传到私有npm服务器,不断迭代npm包来更新管理所有项目的依赖

那么,如何发布属于自己的第一个npm包呢?

1.初始化包的基本结构

新建一个文件夹,在这个文件夹中新建三个文件

新建package.json文件,index.js文件和README.md文件,其中,package.json是包的管理配置文件,index.js文件是包的入口文件,README.md是包的说明文档

image.png

2.初始化package.json

初始化一个json的配置对象,对象里会包含6个属性

{
  "name":"zgw-tools",//这是配置对象里最重要的一个属性,代表这个包的名称,在npm服务器上包的名字不能重复,所以上传前先去官网上搜索一下包名有没有被占用了
  "version": "1.0.0",//version表示包的版本号,一般默认从1.0.0开始
  "main": "index.js",//指定包的入口文件,就是新创建的index.js文件
  "description": "提供了格式化时间的功能",//包的描述信息,
  "keywords": ['dateFormat','formarTime','aaaaa'],//搜索的关键字,数组里的每一个属性都是一个字符串,自定义关键字
  "license": "ISC"//包遵循的开源协议,npm默认遵循ISC协议
}

3.定义格式化时间的方法

在文件夹中新建一个src文件夹,里面创建一个dateFormat.js文件

image.png

在里面定义一个格式化时间的方法

//定义格式化时间的方法,将格式化时间的方法暴露出去
function dateFormat(dataStr){
  const dt=new Date(dataStr)

  const y=dt.getFullYear()
  const m=(dt.getMonth()+1+'').padStart(2,'0')
  const d=(dt.getDate()+'').padStart(2,'0')

  const hh=(dt.getHours()+'').padStart(2,'0')
  const mm=(dt.getMinutes()+'').padStart(2,'0
  const ss=(dt.getSeconds()+'').padStart(2,'0')

  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}

module.exports={
  dateFormat
}

在index.js文件里导入模块,再把对应的方法共享出去

const date=require('./src/dateFormat')
module.exports={
  ...date
}

4.README.md文件编写包的说明文档

## 安装
npm install zgw-tools
 
## 导入
const ztest=require('zgw-tools')

## 格式化时间
//调用dateFormat 对时间进行格式化
const dtstr=dt.dateFormat(new Date())
// 结果 2022-08-01 16:16:00
console.log(dtstr)

## 开源协议
ISC

5.发布包

发布之前首先访问www.npmjs.com/官网首页注册一个账号,注册完成之后终端运行npm login命令,依次输入账号,密码,登陆邮箱即可登录成功,

注意:若配置了其他的下载源,运行npm login命令之前将下载源换回官方源,否则会导致发布失败,nrm ls查看当前下载源

运行npm publish命令,即可将包发布到npm上

发布完成之后可以点击头像,点击Packages查看自己发布的包

image.png

image.png

最后,将自己发布的包根据说明文档下载下来使用

//导入自己上传到npm的包
const z=require('zgw-tools')

// 调用方法,传入当前时间的时间戳
const dt=z.dateFormat(1664717540000)
// 打印结果2022-10-02 21:32:20
console.log(dt)

那么如何删除自己发布的包呢?

运行 npm unpublish 包名 --force命令即可删除发布的包,但是npm unpublish只能删除72小时内发布的包,删除后的包24小时内不允许重复发布,所以尽量不要往npm上发布没有意义的包