1. registry

在下载包的时候,很多人喜欢设置taobao镜像,因为npm仓库服务器在国外,下载速度真是急死个人。发布的时候也一样,一般开源应用基本都发布到npmjs,公司内部包的话就会发到私有Npm仓库,我们可以在package.json设置一下你想要的发布的地址:

"publishConfig": {"registry": "http://registry.npm.xxx.com/"}

也可以设置别名

alias ynpm="npm --registry=http://registry.npm.xxx.com"
// 发布的时候
ynpm publish

2. 发布哪些文件(两种方式)?

发布一个包,考虑到别人的下载速度,包体积肯定需要尽量小,所以源文件最好不包括,那如何控制只发哪些文件呢?

第一种方式是在 package.jsonfiles 字段来控制,这个字段中的文件默认会加入到npm publish 发布的包中,它的优先级高于.npmignore.gitignorefiles 字段的值是一个数组,你可以写具体文件名,也可以写目录,还支持 glob 模式。

第二种就是使用 .npmignore 配置文件,在.npmignore中的文件不会被发布。他类似于 .gitignore ,其实如果没有 .npmignore,会使用.gitignore来取代他的功能。如果同时存在,那么.npmignore的优先级更好。在包的根目录下,.npmignore不会覆盖 files 字段,但在子目录中会覆盖。

有些文件无法通过配置排除或者包含:

  • package.json
  • README
  • CHANGES / CHANGELOG / HISTORY
  • LICENSE / LICENCE
  • NOTICE
  • main字段中的文件

以上文件是默认发布的,无法忽略。所以当你npm publish的时候,为啥总会有package.json文件,明白了吧?这几个文件在npm publish的时候都是默认作为包的一部分的。

  • .git
  • CVS
  • .svn
  • .DS_Store
  • ._*
  • 等等

以上文件无法发布到 npm

3. 版本管理

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

一般来说还有先行版本,测试版本等,他们这样命名

  • 3.1.0-beta.0
  • 3.1.0-alpha.0

如果我们发布先行版本,npm version prepatch 命令得出的版本号好像就不够规范了,我们只能使用 npm version 1.0.0-alpha.1 指定版本号,不过还好,在 npm 6.4.0 之后,我们可以使用 --preid 参数:

npm version prerelease --preid=alpha

4. Changelog

包发布了很多次后,使用者升级就需要知道他是否需要升级,需要查看文档看看有哪些不兼容性改动,所以需要一个 Changelog 来记录每次发布改了些什么。如果手动的维护肯定会有忘记的时候,所以需要使用工具来自动生成,我们可以使用standard-version 这个包来生成,这个包的作用是自动更新版本和生成CHANGELOG

有了这个工具我们都不需要使用npm version prepatch了。standard-version会根据你的git commit信息,自动生成日志,比如新增啥啥功能,修复啥啥啥bug。自动生成的同时,也就意味着你git commit需要遵循一定格式,比如:

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-co lons, etc)
  • refactor: A code change that neither fixes a bug nor adds a feature
  • perf: A code change that improves performance

我们可以使用 commitlint搭配 husky 来校验你commit的信息是否符合标准

{"husky": {"hooks": {"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"}  }
}

也可以使用交互式的方式来生成commit,commitizen这个包就可以。

5. 模块 tag 管理

不经常发布包的同学可能对模块 tag 概念不是很清楚。以vue为例,首先执行npm dist-tag ls vue查看vue包的tag

beta: 2.6.0-beta.3
csp: 1.0.28-csp
latest: 2.6.10

上面列出的betacsplatest就是tag。每个tag对应了一个版本。

一般来说我们至少会有三种类型的标签

  • latest:最后版本,npm install的就是这个
  • beta:测试版本,一般内测使用,需要指定版本号install,例如3.1.0-beta.0
  • next: 先行版本,npm install foo@next安装,例如3.0.2-alpha.0

tag到底有什么用呢?tag类似于git里面分支的概念,发布者可以在指定的tag上发布版本,而使用者可以选择指定的tag来安装包。不同的标签下的版本之间互不影响,这在发布者发布预发布版本包和使用者尝鲜预发布版本包的同时,不影响到正式版本

在发布包的时候执行npm publish默认会打上latest这个tag,实际上是执行了npm publish --tag latest。而在安装包的时候执行npm install xxx则会默认下载latest这个tag下面的最新版本,实际上是执行了npm install xxx@latest。当然,我们也可以自定义tag

# 当前版本为1.0.1
npm version prerelease  # 1.0.2-0
npm publish --tag beta  # 发布一个测试版本
npm dist-tag ls xxx  # # beta: 1.0.2-0
npm install xxx@beta  # 下载beta版本 1.0.2-0

prerelease版本已经稳定了,可以将prerelease版本设置为稳定版本:

npm dist-tag add xxx@1.0.2-0 latest
npm dist-tag ls xxx  # latest: 1.0.2-0

如果你直接执行npm publish,那么即使你的版本号是-beta.n,默认会打上latest的标签,别人install的时候也会下载到。这个时候需要我们只要改一下tag:

// 不小心发错了
latest: 1.0.1-beta.0
// 将1.0.1-beta.0设置为beta
npm dist-tag add my-package@1.0.1-beta.0 beta
npm dist-tag add my-package@1.0.0 latest

npm发包一定要了解的知识相关推荐

  1. 筱筱笔记:npm发包流程

    npm发包流程 我们在开发过程中,为了开发便利,可以下载别人已经封装好了的npm包,那么如何创建自己的npm包呢? 第一步:创建账号 我们想要发布自己的npm包,首先需要在npm网站上去注册一个账号 ...

  2. npm发包、更新包、删除包、回退版本号

    npm发包 1.镜像源必须为npm nrm use 镜像源 //切换镜像源 2.注册(到官网注册账号) 3.进入到你要发的包中,打开终端 4.登录 npm login 输入账号.密码. email 5 ...

  3. 简述 npm 发包流程

    1. 首先注册一个npm账号 官网地址:https://www.npmjs.com/ 注意:需要在邮箱中确认 2. 接着创建项目 mkdir my_modules cd my_modules npm ...

  4. npm 编译打包vue_从零到一教你基于vue开发一个组件库

    前言 Vue是一套用于构建用户界面的渐进式框架,目前有越来越多的开发者在学习和使用.在笔者写完 徐小夕:如何从0到1教你搭建前端团队的组件系统​zhuanlan.zhihu.com 之后很多朋友希望了 ...

  5. npm系列:package.json

    1.关于packag.json的基础知识 这还是我最熟悉的package.json吗? 2.npm发包流程 npm发包流程 - 知乎 3.sh: vue-cli-service: command no ...

  6. React之npm发布Antd样式的组件

    文章目录 一.npm发包需要了解的知识 (1)判断包名是否合法 (2)npm初始化 (3)devDependencies.dependencies和peerDependencies 二.测试发包 三. ...

  7. 前端架构设计第一课 CI环境npm/Yarn

    开篇词 像架构师一样思考,突破技术成长瓶颈 透过工程基建,架构有迹可循.你好,我是侯策(LucasHC),目前任职于某互联网独角兽公司,带领 6 条业务线前端团队,负责架构设计和核心开发.工程方案调研 ...

  8. libnet发包过程

    2019/08/12 (这篇文章更像是解释原生socket发包的过程 2019/08/13) 今天具体了解了一下, 发包的过程,目前知道比较关注的两种两种发包方式,分别是构造IP包和直接构造以太网包: ...

  9. 到Nexus私服的发包实践

    目录 一.前言 二.后端 三.前端 四.总结 一.前言 Nexus是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问. 支持搭建私服,通常被作为docker.npm.yum.go.ap ...

  10. 如何搭建一个私有npm仓库

    业界主流的私有npm仓库搭建的主流方案有如下几种: 付费购买 使用 git+ssh 这种方式直接引用到 GitHub 项目地址 使用 Sinopia 使用 cnpmjs.org 第一种,一是考虑到公司 ...

最新文章

  1. ORB + OPENCV
  2. python常用内置函数可以操作字符串_Python常用内置函数(二)
  3. Android中Context简介
  4. html5 填表 表单 input output 与表单验证
  5. NeurIPS2021 HRFormer:HRNet又出续作啦!国科大北大MSRA提出高分辨率Transformer,开源!...
  6. 20175221 2018-2019-2 《Java程序设计》第一周学习总结
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生考勤管理系统及智能分析系统
  8. 键盘快捷键将剪贴板内容粘贴到命令提示符窗口(Win XP)[关闭]
  9. js实现对树深度优先遍历与广度优先遍历
  10. Mysql数据库恢复到指定时间点
  11. 计算机专业英文授课,计算机专业全英文授课分析
  12. 对java.lang.UnsupportedOperationException 异常的分析
  13. 数独大师级技巧_零基础入手攻克专家级数独难题实战案例
  14. 纸牌游戏——小猫钓鱼(队列、栈)
  15. Vue使用vue-aplayer实现音乐播放
  16. VMware虚拟机win10系统桥接模式连不上网
  17. MCtalk对话尚德机构:AI讲师,假套路还是真功夫?
  18. 蚁群算法c语言实现加注释,蚁群算法代码实现
  19. 开源生态|打造活力开源社区,共建开源新生态!
  20. 大学的计算机证书,大学必拿的几个证书是什么?

热门文章

  1. 【CSDN 每日一题】数组排序(12.9 第三题)— 简单
  2. Oracle函数实现表映射实体类
  3. python 爬虫 使用xpath模块爬取猪八戒网站信息
  4. 基于Java人才招聘网站系统设计实现(源码+lw+部署文档+讲解等)
  5. 三星s10升级android11,三星 S10+ 手机已在测试 Android 11 系统
  6. 解决运行jar包时报错“没有主清单属性“以及丢失依赖jar包的问题
  7. 量化投资学习——ESG投资策略
  8. Python小游戏 -- 猜单词
  9. 60秒计时器显示程序(共阴极数码管)
  10. 谷歌宣布2019年I/O开发者大会将于5月7日举办