最近在做微服务的前后端设计,打算将客户端中的一个模块独立出来发布到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. 使用IIS Server Farms搭建应用服务负载均衡

    当公司的业务扩大, 伴随着大量的请求,应用服务器的承受能力已经不能满足不断增长的业务需求,使用IIS Server Farms搭建应负载均衡的方式,把请求分发给不同的应用服务器进行处理,这个时候就降低 ...

  2. Windows Server 2019 预览版介绍

    在Windows server 2012.Windows server 2016还未完全普及的情况下,昨天Windows Server团队宣布Windows Server 2019将在2018年的下半 ...

  3. python爬微信公众号前10篇历史文章(3)-lxml&xpath初探

    理解lxml以及xpath 什么是lxml? python中用来处理XML和HTML的library.与其他相比,它能提供很好的性能, 并且它支持XPath. 具体可以查看官方文档->http: ...

  4. 1-2 Spring 的基本使用

    1.Spring容器的配置文件applicationContext.xml的引入 名称可以自己定义 <?xml version="1.0" encoding="UT ...

  5. 【Python】 linux中python命令的命令行参数

    Python命令行参数 原文地址:http://blog.163.com/weak_time/blog/static/25852809120169333247925/ Python的命令行参数,提供了 ...

  6. Android学习笔记2——shape

    Android有很多特别的xml文件,如常用的selector.style以及shape,熟练使用这些xml可以是我们的项目变得更个性化. 一.子标签(corners.gradient.padding ...

  7. python实现的txt目录树

    首先,我先表述一下我的需求: 我记笔记比较乱,但我比较容易"半途而废".文件夹很多,但大都只有一两个文件.... 所以我需要一种方式,能在不逐个打开文件夹的前提下,"看到 ...

  8. Android Service基础

    Service Service 是一个组件,用来执行长时间的后台操作,不提供用户界面. 另一个应用组件可以启动一个Service,它将持续地在后台运行,即便是用户转移到另一个应用它也不会停止. 另外, ...

  9. linux小白成长之路7————Docker安装mysql

    [内容指引] 从Docker检索mysql镜像: Mysql Docker镜像下载: 查看本地镜像列表: 设置Mysql的Docker镜像开机自动运行: 常用Docker指令及参数: 1.从Docke ...

  10. hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)

    hostPath Volume 的作用是将 Docker Host 文件系统中已经存在的目录 mount 给 Pod 的容器.大部分应用都不会使用 hostPath Volume,因为这实际上增加了 ...