如何开发一个npm包并发布到npm中央仓库
转自: https://liaolongdong.com/2019/01/24/publish-public-npm.html
如何开发一个npm包并发布到npm中央仓库
需求背景:平时在项目工作中可能会用到很多通用性的代码,比如,框架类、工具类以及公用的业务逻辑代码等等,通过打包发布到npm中央仓库或者私有仓库,来进行维护和托管代码,方便公用代码的使用,如果涉及到不方便公开的代码组件可以发布到私有仓库。
npm包命名规则及文件夹结构
用模块的名称命名根目录,npm包名不能重复
每个npm包根目录下都包含一个index.js文件和package.json文件
src目录,用于放置未压缩的源码
dist目录,用于放置压缩后的代码
使用package.json文件的规格来描述本模块
发布npm到npm中央仓库(公共仓库)
1、注册npm账号
我们在发布npm包之前,要去npm官网注册一个账号,注册完账号以后,点击邮件链接完成验证
2、编写模块
首相,创建publishNpm文件夹,在该文件夹下添加helloworld.js文件和index.js文件,代码如下:
// 创建模块目录
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文件
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"
}
注意:1、npm包名称name的值不能和已经存在的npm包名相同;2、每次版本更新都必须修改版本号version的值
3、发布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常见错误
1、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/
2、账号未登录
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
3、重新发布未修改版本号
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文件修改版本号
如何开发一个npm包并发布到npm中央仓库的更多相关文章
- 如何开发一个npm包并发布
一.安装nodejs 不多说了,网上教程多得是 二.创建自己的npm包 目录结构 npm-test a.js b.js package.json 开发 为了简单便于理解,就开发一个简单地hello程序 ...
- npm包的发布和管理
npm包管理 npm其实是Node.js的包管理工具(node package manager). 为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScrip ...
- npm 包的 发布 流程
npm 包的发布流程 本文主要是针对 还未曾发布过自己的 npm 的同学,阐述一下 npm 的发布流程 熟悉的同学,可以绕道了. 首先你得有一个 自己的 npmjs.com 的账号 (没有的话,就到 ...
- npm包的发布
假设该待发布包在你本地的项目为 project1 包的本地安装测试 在发布之前往往希望在本地进行安装测试.那么需要一个其他的项目来本地安装待发布项目. 假设该其他项目为project2.假设proje ...
- 如何开发 Laravel 扩展包并发布到 Composer
如何开发 Laravel 扩展包并发布到 Composer 发布于 2019-01-22 cxp1539 1074 Vie 开发扩展包 我们来做一个根据第一个字符或者汉字生成头像的larave ...
- Github 持续化集成 工作流 Npm包自动化发布
Github 持续化集成 工作流 Npm包自动化发布 简介 持续集成指的是,频繁地(一天多次)将代码集成到主干. 它的好处主要有两个: 快速发现错误.每完成一点更新,就集成到主干,可以快速发现错误 ...
- 如何将JAR包发布到Maven中央仓库?
将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,例如fundebug-java: <!-- ht ...
- npm包的上传npm包的步骤,与更新和下载步骤
官网: ======================================================= 没有账号可以先注册一个,右上角点击“Sign Up",有账号直接点击“ ...
- 将jar包发布到maven中央仓库
将jar包发布到maven中央仓库 最近做了一个swagger-ui的开源项目,因为是采用vue进行解析swagger-json,需要前端支持,为了后端也能方便的使用此功能,所以将vue项目编译后的结 ...
随机推荐
- unittest管理接口用例
1.加入unittest框架 #coding=utf-8 import requests import unittest class TestApi(unittest.TestCase): def s ...
- Python_类的私有属性、私有方法
1.私有属性:只需要在初始化时,在属性名前加__ class Cup: #构造函数,初始化属性值 def __init__(self,capacity,color): #私有属性,只需要在属性名字前加 ...
- kubernetes 清理孤儿POD--转发
孤儿pod的产生 节点OOM以后或者节点异常崩溃的情况下,pod未能被正常的清理而导致的孤儿进程. 提示如下 Orphaned pod found - but volume paths are sti ...
- jmeter设置代理服务器录制脚本
新建测试计划之后: 1.添加非测试元件:HTTP代理服务器 a.其中目标控制器可以控制选哪个线程放录制的脚本: b.将端口设置为8888或者其他不常用的端口,保持跟其他应用的端口不一致,否则被占用导致 ...
- Spark API--Spark 分区
一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...
- SOA与ESB,微服务与API网关
SOA与ESB,微服务与API网关 SOA: ESB: 微服务: API网关: 参考资料: 1.漫画微服务,http://www.sohu.com/a/221400925_100039689 2.SO ...
- 事件类型(onload)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)
译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...
- Calibre中使用DeDRM插件进行Kindle电子书解锁
小书匠 废话不多说,下面是Calibre和DeDRM插件的下载地址: https://calibre-ebook.com/download https://github.com/apprenticeh ...
- C博客作业03——函数
0.展示PTA总分 截图展示: 1.本章学习总结 1.1学习内容总结 (a)函数的定义 1)函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数两种,scanf(),printf()等为库函数 ...