转自: https://liaolongdong.com/2019/01/24/publish-public-npm.htmlhtml
如何开发一个npm包并发布到npm中央仓库
需求背景:平时在项目工做中可能会用到不少通用性的代码,好比,框架类、工具类以及公用的业务逻辑代码等等,经过打包发布到npm中央仓库或者私有仓库,来进行维护和托管代码,方便公用代码的使用,若是涉及到不方便公开的代码组件能够发布到私有仓库。npm
npm包命名规则及文件夹结构
用模块的名称命名根目录,npm包名不能重复json
每一个npm包根目录下都包含一个index.js文件和package.json文件并发
src目录,用于放置未压缩的源码框架
dist目录,用于放置压缩后的代码工具
使用package.json文件的规格来描述本模块ui
发布npm到npm中央仓库(公共仓库)
一、注册npm帐号
咱们在发布npm包以前,要去npm官网注册一个帐号,注册完帐号之后,点击邮件连接完成验证this
二、编写模块
首相,建立publishNpm文件夹,在该文件夹下添加helloworld.js文件和index.js文件,代码以下:debug
// 建立模块目录 mkdir publishNpm // 进入目录 cd publishNpm // 建立helloworld.js文件和index.js文件 touch helloworld.js index.js // helloworld.js文件 function helloworld (name) { console.log('hello world,', name); } exports.helloworld = helloworld; // index.js文件 var helloworld = require('./helloworld'); console.log('helloworld', helloworld); helloworld.helloworld('better');
接下来,在publishNpm目录下,执行npm init命令,初始化package.json文件code
npm init // package.json 文件 { "name": "lld-npm-demo", "version": "1.0.1", "description": "publish npm demo", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "better", "license": "ISC" }
注意:一、npm包名称name的值不能和已经存在的npm包名相同;二、每次版本更新都必须修改版本号version的值
三、发布npm到npm公共仓库
添加帐户
npm adduser
输入用户名、密码和邮箱
查看当前登陆的用户
npm who am i
发布npm包
npm publish
发布成功之后,就能够在npm我的中心看到刚刚发布的npm包了
更新npm包
和发布npm同样都是使用npm publish命令,更新发布以前必须修改版本号
使用npm
和咱们平时使用npm同样
npm install lld-npm-demo
发布npm常见错误
一、npm仓库设置了淘宝镜像
npm ERR! code E403 npm ERR! 403 Forbidden - PUT https://registry.npm.taobao.org/lld-npm-demo - no_perms npm ERR! A complete log of this run can be found in: npm ERR! /Users/better/.npm/_logs/2019-01-24T02_08_54_914Z-debug.log 解决方案: // 检查仓库是否被设成了淘宝镜像库(https://registry.npm.taobao.org/) npm config get registry // 若是设置了淘宝镜像,执行如下命令 npm config set registry=http://registry.npmjs.org // 解决问题后从新发布 npm publish // 发布成功之后,在设会淘宝镜像 npm config set registry=https://registry.npm.taobao.org/
二、帐号未登陆
npm ERR! code E401 npm ERR! 401 Unauthorized - PUT http://registry.npmjs.org/lld-npm-demo - You must be logged in to publish packages. npm ERR! A complete log of this run can be found in: npm ERR! /Users/better/.npm/_logs/2019-01-24T02_13_00_370Z-debug.log 解决方案: // 登陆用户 npm login npm adduser // 登陆用户之后从新发布 npm publish
三、从新发布未修改版本号
npm ERR! code E403 npm ERR! 403 Forbidden - PUT http://registry.npmjs.org/lld-npm-demo - You cannot publish over the previously published versions: 1.0.0. npm ERR! A complete log of this run can be found in: npm ERR! /Users/better/.npm/_logs/2019-01-24T02_55_19_409Z-debug.log 解决方案:在package.json文件修改版本号