跳到主要内容

npm 发布和更新

官网地址:npm

私有模块和公有模块

npm分为私有模块和公有模块

两者区别:

  • 私有模块只能在发布它的项目内使用,不能被其他项目依赖;公有模块可以被任何项目依赖
  • 私有模块的包名一般以 @ 或 _ 开头,以表示它是私有的;公有模块的包名则不能以@、_等符号开头
  • 私有模块只能发布到私有的 npm registry,不能发布到 npm 官方站点;公有模块可以发布到 npm 官方站点,供所有人使用
  • 安装私有模块需要配置 .npmrc 文件,指定私有 registry 的地址;公有模块则直接使用官方 npm registry 安装
  • 私有模块不会出现在 npm 搜索结果中;公有模块会出现在搜索结果并显示下载统计数据。
  • 私有模块只在付费的 npm 团队版中支持;npm 的免费版只能用于公有模块

私有模块主要用于项目内部或企业内部共享代码,公有模块用于开源分享给所有人,选择公有或私有主要取决于代码的可见性需求。本文将以公有模块作为例子进行npm的发布与更新

注册

在npm官网使用邮箱注册一个账号 img.png

登录

本地登陆npm账号

$ npm login
# 然后输入自己的账号、密码以及邮箱

登录之后,可以执行npm profile get查看自己的信息,也可以使用npm profile set xx xx设置信息。

如果有多个账号,不确定登陆的账号是什么,可以通过npm who am i快速查看

$ npm profile get
┌─────────────────┬──────────────────────────────────┐
│ name           │ Shawkry                         │
├─────────────────┼──────────────────────────────────┤
│ email           │ Shawkry@gmail.com (verified)     │
├─────────────────┼──────────────────────────────────┤
│ two-factor auth │ disabled                         │
├─────────────────┼──────────────────────────────────┤
│ fullname       │ Shawkry                         │
├─────────────────┼──────────────────────────────────┤
│ homepage       │                                 │
├─────────────────┼──────────────────────────────────┤
│ freenode       │                                 │
├─────────────────┼──────────────────────────────────┤
│ twitter         │                                 │
├─────────────────┼──────────────────────────────────┤
│ github         │ Shawkry                         │
├─────────────────┼──────────────────────────────────┤
│ created         │ 2021-08-25T05:24:08.081Z         │
├─────────────────┼──────────────────────────────────┤
│ updated         │ 2021-08-25T06:57:07.287Z         │
└─────────────────┴──────────────────────────────────┘
$ npm profile set homepage shawkry.top
$ npm who am i
# shawkry

发布

  1. 我们先在package.json中添加以下字段
{
"name": "elephant/poke",
"version": "0.0.1",
"description": "Elephant Design Poke",
"author": {
"name": "xxx",
"email": "xxx@gmail.com",
"url": "https://github.com/xxx"
},
"private": false,
"files": [
"dist"
]
}
  1. rollup 打包(一定要先打包📦,再发布)
$ roll up -c
  1. 运行npm publish
$ npm publish [package file]

更新

当更新部分功能时,需要升级版本号,才能重新发布。

npm version <version_type>
# version_type:
# patch: bug fixed x.x._
# minor: add feature x._.x
# major: update _.x.x
npm publish

也可以直接手动更改package.json文件的version字段进行手动更新,再进行发布。

版本管理

npm version

npm的发包需要遵循语义化版本,一个版本号包含三个部分:MAJOR.MINOR.PATCH,

  • MAJOR 表示主版本号,当你做了不兼容的API修改;
  • MINOR 表示次版本号,当你做了向下兼容的功能性新增;
  • PATCH 表示修订号,当你做了向下兼容的问题修正;

我们可以使用npm version 命令来自动修改版本号,比如:

// version = v1.0.0
npm version patch
// v1.0.1
npm version prepatch
// v1.0.2-0
npm version minor
// v1.1.0
npm version major
// v2.0.0

补充

为了适应不同的模块系统,都需要将写好的内容打包。一般我们使用的包都要支持以下特性:

  • 不同的模块支持:针对不同的模块,打对应的包,然后进行相关的配置。package.json中有main module unpkg,分别支持设定 commonjs、ESM 以及 umd。
  • 类型提示:打包时,生成类型声明文件d.ts,并且配置package.json中的typings字段。
  • 按需加载:按需加载是在 babel 编译过程中,按需引入相关代码。借助 babel 的插件babel-plugin-import,将不同的组件或者函数拆分开。
  • 支持 Tree Shaking:Tree Shaking 是在 webpack 打包阶段,移除不相关的 js 代码。只需配置好package.jsonsideEffects字段。
  • package.json字段参考:package.json