最近在做微服务的前后端设计,打算将客户端中的一个模块独立出来发布到npmjs上,因此,有机会了解了一下npm的发布过程。
参考了很多网上的文章,长篇累牍(但在这里还是真心感谢他们的分享),最终总结成一个命令:

npm publish

 
当然,为了让这个命令成功执行,准备如下:
  1. 初始化项目
  2. 创建npm账号
 

初始化项目

命令:npm init
 
这是一个交互式命令,最终会生成package.json,要求你输入以下内容:

name

包的名称

version

包的版本,格式通常是major.minor.patch,即类似1.0.1

在运行npm version时,会同步修改这个值

main

包的加载入口。

我们这里讨论的前提是发布到NPMJS,也就是说,nodejs的模块加载器会根据这里的信息来加载模块。

路径是以当前package.json文件为基准的相对路径。例如,如果你直接以根目录的index.js为包的加载入口,可以写成./index.js或者index.js。

如果你用webpack来进行打包,那么打包后文件的输出地址必须与你在main属性上的地址保持一致。

但webpack打包并不是必须的,你只需要保证包的加载入口的路径正确即可。

同理,如果你打算发布的包使用typescript编写的,你也需要保证编译后的输出路径与包的加载入口的路径一致。

如果你的typescript包的目标项目仍然是typescript项目,你甚至不需要对其进行编译就可以直接发布。

description

包的描述

test command

包的测试入口。按回车键,跳过设置。

git repository

包的repository地址

如果当前目录已经在git的本地repository内,那么系统会自动为你填充git repository的地址,除此之外,系统还会自动为你填充以下值:

bugs

homepage

因此,建议先将项目文件夹从git上clone到本地,在运行npm init来初始化项目。

keywords

包的关键字,会显示在github的列表上。

author

作者名称,一般填写邮箱地址。

license

默认是ISC,按回车键跳过设置

 
以上命令运行完成后,你会得到类似于下面的package.json文件。

创建npm账号

npm adduser

在当前工作目录下运行该命令,用于创建npm账号,如果你已经有一个npm账号,请忽略。

此外,如果你此前为了加速npm的下载速度而修改了npm的下载源,那么你得将npm的源改回去。
npm config set registry https://registry.npmjs.org/

用户创建成果后,要求你验证邮箱。

npm login

在当前工作目录下运行该命令,登录到npmjs,为发布作准备。

 
到此,准备工作完成。接下来就可以发布到npmjs了。
登录到npmjs后,你可以在packages中,浏览你即将发布的包。

 接下来进入发布阶段,你会用到如下命令。
  1. npm version
  2. npm publish

npm version

用于设置包的版本。同时会修改package.json中的version,并且在git repository上打上对应的tag
具体命令为
npm version 1.0.1
该命令执行时,会自动修改package.json中的version属性,将值改为1.0.1。另外,它还会commit你本地的修改,并在本地的git repository上打上v1.0.1的tag。
我本人是很认同这种做法的。每一个版本都应该在git repository上留下对应的标记,这样做也方便日后查看这个版本到底修改了什么。
当然,如果你不想在设置版本时修改git repository,也可以将其关闭掉(在命令行上加上--no-git-tag-version)。
 
 
在命令上加上-m 参数就可以为这次发布加上comments,同时将comments保存到git的tag上。例如:
npm version 1.0.1 -m "fix a .... bug"
 
你可能会发现,每次发布时,我都要先看之前的版本号是多少,然后在决定新的版本号,这是一件很麻烦的事情。因此npm version还为我们提供了更加方便的options:
patch, minor, major, prepatch, preminor, premajor, prerelease
pre是预发版本
版本的格式为:major.minor.patch
也就是说,假设当前版本是1.0.2
运行npm version patch,版本号变成1.0.3
运行npm version minor,版本号变成1.1.0
运行npm version major,版本号编程2.0.0
当加上pre前缀时,版本号的变化同上,但是后面会加上预发版本号,从0开始。假设当前版本号是1.0.2
运行npm version prepatch,版本号变成1.0.3-0。
要递增预发版本号,则使用prerelease。假设当前版本号是1.0.3-0。
运行npm version prerelease,版本号编程1.0.3-1。
 
因此,你基本上可以从版本号的命名管理中解脱出来了。

npm publish

在当前工作目录下运行该命令,你的包就发布到npmjs上了。
需要注意的是,发布时会将当前目录下的所有文件(包含.git)文件都发布上去。这肯定不是我们想要的结果。
因此,你可以将不用发布到npmjs上的文件添加到根目录下的.npmignore文件中。
 
另外,你在README.md文件中添加的内容,除了会显示在你的github的项目首页,同时也会显示在npmjs package的首页。
因此,你除了精心准备你的代码外,还有必要准备一下README.md中的内容。
 
发布完成后,你就可以在npmjs上看见你的作品了。以下截图是我发布的一个关于microservice的库seneca_client_for_ng2

 
 
为了学习和掌握这个小技术,衷心感谢以下站点及文章的帮助:
https://docs.npmjs.com/cli/init
https://my.oschina.net/fenying/blog/1607571
http://www.cnblogs.com/tzyy/p/5193811.html
 
 

发布到NPMJS的更多相关文章

  1. 如何把自己的代码发布到npmjs(npm publish)

    来源: https://www.cnblogs.com/calamus/p/8384318.html

  2. 基于node的前端组件包发布至nexus和npmjs

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 建立组件的导出模块... 1 2.2. 建立组件入口文件... 1 2.3. 配置“ng-package.json”文件.. ...

  3. gitbook 入门教程之从零到壹发布自己的插件

    什么是插件 Gitbook 插件是扩展 Gitbook 功能的最佳方式,如果 Gitbook 没有想要的功能或者说网络上也没有现成的解决方案时,那么只剩下自食其力这条道路,让我们一起来自力更生开发插件 ...

  4. 前端组件用 Scope 发布 npm 包的方法

    1.引言 多人.多组织或多组件发布 npm 包到同一个仓库时,可能出现命名冲突问题. 为了解决这个问题,npm 引入了“scope”(范围)概念. 在 Angular 项目中,我们通常可以看到“@an ...

  5. 05.ElementUI源码学习:项目发布配置(github pages&npm package)

    0x00.前言 书接上文.项目第一个组件已经封装好,说明文档也已编写好.下面需要将说明文档发布到外网上,以此来展示和推广项目,使用 Github Pages功能实现.同时将组件发布之 npm 上,方便 ...

  6. Npm包的开发

    个人开发包的目录结构 ├── coverage //istanbul测试覆盖率生成的文件 ├── index.js //入口文件 ├── introduce.md //说明文件 ├── lib │   ...

  7. jQuery2.x源码解析(构建篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 笔者阅读了园友艾伦 Aaron的系列博客< ...

  8. nodejs简单层级结构配置文件

    在NodeJS中使用配置文件,有几种比较不错的方案:第一种:文件格式使用json是毋容置疑的好方案.格式标准,易于理解,文件内容读取到内存之后,使用JSON的标准分析函数即可得到配置项.第二种:将配置 ...

  9. 记npm包开发全过程

    概述 为什么开发npm包? 如何开发? 如何写单元测试? package.json 如何发布模块? 如何使用? 为什么开发npm模块? NPM的全称是Node Package Manager,是一个N ...

随机推荐

  1. WCF服务寄宿到IIS

    一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的wind ...

  2. 【前端单元测试入门02】react的单元测试之Enzyme

    React项目的单元测试 React的组件结构和JSX语法,对上一章的内容来讲进行测试显得很勉强. React官方已经提供了一个测试工具库:react-dom/test-utils 只是用起来不够方便 ...

  3. 访问不了firefox附加组件页面怎么办

    最近重新使用火狐浏览器的时候发现访问不了firefox附加组件页面了,一直是一个空白的页面,估计是被墙的原因,于是网上查了查,说是修改hosts即可,我修改后就可以正常访问了.现在分享出来: 在hos ...

  4. lr11录制脚本出现中文乱码

      录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择中支持UTF-8.在IIS中找到Web.Config文 ...

  5. 微信公众号开发 VS2015本地调试

    1.部署一个微信公众号服务在本地IIS: 2.下载一个ngrok 穿网工具,放到部署文件夹根目录: ngrok穿网 在部署路径下打开cmd,输入 ngrok http [端口号] 4.将映射的URL ...

  6. elfinder中通过DirectoryStream.Filter实现筛选隐藏目录(二)

    今天还是没事看了看elfinder源码,发现之前说的两个版本实现都是基于不同的jdkelfinder源码浏览-Volume文件系统操作类(1), 带前端页面的是基于1.6中File实现,另一个是基于1 ...

  7. 微信公众号开发,weUi组件,问题总结

    1.实现上拉分页,Google兼容问题,weui框架提供的模板是这样的($(document.body).infinite()),在body定一个div通过这个div,实现上拉 $('#wrapper ...

  8. [模拟赛] T1 无线通讯网

    Description 国防部计划用无线网络连接若干个边防哨所.2种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的 ...

  9. Spring Cloud Contract

    http://www.infoq.com/cn/news/2017/04/spring-cloud-contract 在默认情况下,我们希望用户以JAR文件的形式将生产者存根和契约发布到Maven库. ...

  10. JAVA连接SAP

    1.首先需要在SAP事务码SE37中新建一个可以被远程调用的RFC 事务码:SE37 新建一个函数组:输入事务码SE37回车后,来到函数构建器屏幕,到上面一排菜单栏:转到 -> 函数组 -> ...