最近在做微服务的前后端设计,打算将客户端中的一个模块独立出来发布到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. Canvas 画布组件(官网翻译)

    Canvas画布 The Canvas is the area that all UI elements should be inside. The Canvas is a Game Object w ...

  2. 如何配置springboot一访问服务器本地图片

    大家好,之前写过一篇配置tomcat访问服务器本地资源的,但现在使用了springboot内嵌tomcat\jeyyt后,怎么来访问本地资源呢? 打好springboot框架后,在applicatio ...

  3. tp框架的MVC模式

    一.定义 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方 ...

  4. ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...

  5. TCHAR字符串查找&反向查找字符串

    C++支持两种字符串,即常规的ANSI编码("字符串")和Unicode编码(L"字符串"),相应的就有两套字符串处理函数,比如:strlen和wcslen,分 ...

  6. 在Ubuntu下如何切换到超级用户

    由于 Ubuntu 是基于 Debian 的 linux 操作系统,在默认的情况下,是没有超级用户(superuser, root)的,但有些系统操作必须有超级用户的权限才能进行,如手动释放内存等. ...

  7. webpack-dev-server 搭建本地服务以及浏览器实时刷新

    一.概述开发项目中为了保证上线,开发项目是都需要使用localhost进行开发,以前的做法就是本地搭建Apache或者Tomcat服务器.有的前端开发人员 对服务器的搭建和配置并不熟悉,这个时候需要后 ...

  8. spring-boot 多模块化项目和EurekaServer的搭建

    Spring boot由于其 1.易于开发和维护.2.单个微服务启动快.3.局部修改部署容易.4.技术栈不受语言限制等优点受到越来越多公司的重视.spring-boot还集成了许多关于微服务开发的框架 ...

  9. Nginx代理转发Apache+svn

    1.安装svn和httpd yum install httpd yum install subversion mod_dav_svn 创建仓库目录 mkdir -p /var/www/svn 3.创建 ...

  10. php项目中常用的log日志记录方法

    function log_result($str) { if (LOG_WRITEOUT == 1) { $fp = fopen ( "log.txt", "a+&quo ...