如何发布第一个属于自己的npm包

什么是NPM?
NPM是随同NodeJS一起安装的javascript包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

发布前的准备

  1. 注册一个npm账号
    https://www.npmjs.com/signup
    前往NPM官网进行注册

  2. 创建一个简单的包
    在本地创建一个项目文件夹sugars_demo (名字自己取,不要和NPM上已有的包名重复冲突就好)
    然后通过终端进入文件夹(路径每个人不一样)

cd sugars_demo
接着可以通过命令创建一个包信息管理文件package.json

npm init
一路回车或根据包的内容来填写相关信息后,package.json内容大概如下

{
  "name": "sugars_demo",
  "version": "1.0.0",
  "description": "A demo",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": ""
  },
  "keywords": [
    "sugars",
    "demo"
  ],
  "author": {
    "name": "sugars",
    "email": "[email protected]"
  },
  "license": "MIT"
}

接着在sugars_demo文件夹里创建一个index.js文件,然后简单敲几行代码

;(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
    typeof define === 'function' && define.amd ? define(factory) :
      global.moduleName = factory()
}(this, (function () {
  var test = {
    sayHi: function () {
      console.log('hi');
    }
  };

  return test
})))

到这里一个简单的包就创建好了。
如果想再完善一下的话,还可以在包根目录下创建README.md文件,里面可以写一些关于包的介绍信息,最后发布后会展示在NPM官网上。

开始发布创建好的包
使用终端命令行
如果是第一次发布包,执行以下命令,然后输入前面注册好的NPM账号,密码和邮箱,将提示创建成功

npm adduser

如果不是第一次发布包,执行以下命令进行登录,同样输入NPM账号,密码和邮箱

npm login

注意:npm adduser成功的时候默认你已经登陆了,所以不需要再进行npm login了

接着先进入项目文件夹下,然后输入以下命令进行发布

npm publish

当终端显示如下面的信息时,就代表版本号为1.0.0的包发布成功啦!前往NPM官网就可以查到你的包了

myMacBook-Pro:sugars_demo sugars$ npm publish

如果遇到显示以下信息,比如

npm ERR publish 403

You do not have permission to publish ‘bootstrap’.Are you logged in as
the corrent user?:bootstrap

意思就是你没有权限发布名为“bootstrap”的包,显然这个鼎鼎有名的包已经有人发布了,所以你只能另取它名。

更新已经发布的包
更新包的操作和发布包的操作其实是一样的

npm publish
但要注意的是,每次更新时,必须修改版本号后才能更新,比如将1.0.0修改为1.0.1后就能进行更新发布了。
这里的包版本号有一套规则,采用的是semver(语义化版本),通俗点意思就是版本号:大改.中改.小改

npm包的版本号规则
一个版本号分为三个部分:X.Y.Z

X 表示主版本号。当你做了重大修改导致新版本不兼容旧的代码时,就需要更新主版本号;
Y 表示次版本号。当你添加了新的功能, 但没有破坏原有的功能,就需要更新次版本号;
Z 表示补丁更新。当你只是简单的修复了BUG,没有做任何新功能的添加,或者旧功能的修改,就需要更新补丁;
此规则对包管理和使用非常重要,请严格按照规则执行。

可手动更改版本号
使用命令更新,如下:

npm version patch	//第三位增1。一共三位数字 "1.0.0"
npm version minor	//第二位增1
npm version major	//第一位增1

npm上传白名单
在 package.json 文件添加如下代码,表示:

上传文件包括 src/ | demo/ | index.js
始终上传 README.md | package.json | LICENSE

"files": [
    "src",
    "demo",
    "index.js"
]

npm上传黑名单(忽略文件)
在项目根目录创建文件 .npmignore 忽略规则同 .gitignore。在这里定义的文件即使在白名单里存在,也同样会被忽略,如下: demo 文件夹下面的所有文件将会被忽略

/demo

npm包的删除与弃用
只有在发包的24小时内才允许撤销发布的包

npm unpublish
弃用特定版本以及版本范围

npm deprecate [@]

常见错误:
npm adduser的时候报 报错e409 Conflict
Registry returned 409 for PUT on http://registry.npm.taobao.org/-/user/org.couchdb.user:666: conflict

出现这个错误最大的可能性是我们把registry选项替换成了淘宝的镜像

解决方案:
npm login --registry http://registry.npmjs.org
npm publish --registry http://registry.npmjs.org

{
  // 包的名称
  "name": "sg-utils",
  // 包的版本号
  "version": "1.4.6", 
  // 包的描述
  "description": "javascript通用工具类", 
  // 包的入口文件
  "main": "index.js", 
  // 上传npm的白名单,即被允许上传的文件
  "files": [ 
    "src",
    "demo",
    "index.js"
  ],
  // 指定了运行脚本命令的npm命令行缩写
  "scripts": {
    "start": "node server.js"
  },
  // 远程代码仓库
  "repository": {
    "type": "git",
    "url": "https://github.com/shiguang0116/sg-utils"
  },
  // 关键字
  "keywords": [
    "javascript",
    "util"
  ],
  // 作者
  "author": "guang.shi",
  // 许可证数组
  "license": "ISC",
  // 提交bug的地址
  "bugs": {
    "url": "https://github.com/shiguang0116/sg-utils/issues"
  },
  // 包的主页
  "homepage": "https://github.com/shiguang0116/sg-utils#readme",
  // 运行引擎,指明node.js运行所需要的版本
  "engines": {
    "node": ">= 6.0.0",
    "npm": ">= 3.0.0"
  },
  // 开发环境的依赖包列表
  "devDependencies": {
    "eslint": "^5.16.0",
    "eslint-config-vui": "^0.2.7",
    "eslint-plugin-html": "^5.0.5"
  },
  // 生产环境的依赖包列表
  "dependencies": {},
  // 依赖包列表
  "peerDependencies": {}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章