转自: 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中央仓库的更多相关文章

  1. 如何开发一个npm包并发布

    一.安装nodejs 不多说了,网上教程多得是 二.创建自己的npm包 目录结构 npm-test a.js b.js package.json 开发 为了简单便于理解,就开发一个简单地hello程序 ...

  2. npm包的发布和管理

    npm包管理 npm其实是Node.js的包管理工具(node package manager). 为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScrip ...

  3. npm 包的 发布 流程

    npm 包的发布流程 本文主要是针对 还未曾发布过自己的 npm 的同学,阐述一下 npm 的发布流程 熟悉的同学,可以绕道了. 首先你得有一个 自己的 npmjs.com 的账号 (没有的话,就到 ...

  4. npm包的发布

    假设该待发布包在你本地的项目为 project1 包的本地安装测试 在发布之前往往希望在本地进行安装测试.那么需要一个其他的项目来本地安装待发布项目. 假设该其他项目为project2.假设proje ...

  5. 如何开发 Laravel 扩展包并发布到 Composer

    如何开发 Laravel 扩展包并发布到 Composer  发布于 2019-01-22 cxp1539  1074 Vie   开发扩展包 我们来做一个根据第一个字符或者汉字生成头像的larave ...

  6. Github 持续化集成 工作流 Npm包自动化发布

    Github 持续化集成 工作流 Npm包自动化发布 简介   持续集成指的是,频繁地(一天多次)将代码集成到主干. 它的好处主要有两个: 快速发现错误.每完成一点更新,就集成到主干,可以快速发现错误 ...

  7. 如何将JAR包发布到Maven中央仓库?

    将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,例如fundebug-java: <!-- ht ...

  8. npm包的上传npm包的步骤,与更新和下载步骤

    官网: ======================================================= 没有账号可以先注册一个,右上角点击“Sign Up",有账号直接点击“ ...

  9. 将jar包发布到maven中央仓库

    将jar包发布到maven中央仓库 最近做了一个swagger-ui的开源项目,因为是采用vue进行解析swagger-json,需要前端支持,为了后端也能方便的使用此功能,所以将vue项目编译后的结 ...

随机推荐

  1. Gtest:死亡测试

    转自:玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试 一.前言 “死亡测试”名字比较恐怖,这里的“死亡”指的的是程序的崩溃.通常在测试过程中,我们需要 ...

  2. MySQL数据库扫盲篇

    MySQL数据库扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.MySQL概述 1>.什么是MySQL MySQL是瑞典的MySQL AB公司开发的一个可用于各 ...

  3. MSF MS12-020RDP漏洞攻击

    Metasploit利用远程桌面协议RDP拒绝访问漏洞(MS12-020) 漏洞描述:BUGTRAQ ID: 52354 CVE ID: CVE-2012-0152 远程桌面协议(RDP, Remot ...

  4. Kotlin中Range与异常体系剖析

    好用的集合扩展方法: 下面来看一下对于集合中好用的一些扩展方法,直接上代码: 如果我们想取出集合中的第一个值和最后一个值,用Java方式是get(0)和get(size-1),但是在Kotlin中提供 ...

  5. python正则表达式(1)--特殊字符

    正则表达式—特殊表达式含义 正则表达式的字母和数字表示他们自身,但多数字母和数字前加一个反斜杠时会拥有不同的含义. 下面列出了正则表达式模式语法中的特殊元素. 1.普通字符集 1)    \w     ...

  6. Vue的参数请求与传递

    Vue不同模板之间的参数传递 页面路由带参数的跳转: 参数接收: Vue向服务器请求资源的两种方式 VUE-RESOURCE 1.Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不 ...

  7. Haskell语言学习笔记(95)Semiring

    semirings 模块 semirings 模块需要安装 $ cabal install semirings Installed semirings-0.2.0.1 Prelude> :m + ...

  8. apache commons-configuration包读取配置文件

    1.pom依赖添加 <!-- 配置文件读取 --> <dependency> <groupId>commons-configuration</groupId& ...

  9. Effective C++ 读后感笔记

    1.赋值不一定是初始化.例如 AClassName::AClassName(const std::string &name, const std::string &address, c ...

  10. if语句的嵌套:从键盘输入3个实数,求其最大值。

    #include<stdio.h>void main(){ float a,b,c,max; scanf("%f%f%f",&a,&b,&c); ...