文档章节

npm 发布包填坑指南

dkvirus
 dkvirus
发布于 2017/08/30 21:37
字数 1682
阅读 22
收藏 0
点赞 0
评论 0

最近使用 Npm 发布包时遇到了一些坑,集中记录下以便后续查看。

01.

就个人经验来说,我们写的包往哪儿发布,无非下面三个地方。其中淘宝镜像仓库每隔十分钟会同步一下 Npm 仓库的新模块,所以实际要看的也就是往 Npm 仓库和公司内部搭建的私有 Npm 仓库上如何发布包。搞不清楚他们的关系就会碰到一些欲罢不能的大坑。

  • Npm 仓库

    Npm 仓库是一个公共平台,所有人开发的模块想要共享都可以扔上去,有人需要使用什么功能去上面找即可。缺点是服务器架设在国外,国内下载包时速度比较慢。

  • 淘宝镜像仓库

    淘宝镜像仓库由阿里云赞助,在国内搭设的一套服务器,每隔十分钟从 Npm 仓库上同步一下包,内容可以认为和 Npm 仓库是一样的,所以国内一般都会把下载仓库地址设置为淘宝镜像仓库,这样子下载包时会大大加快速度。

  • 公司内部私有 npm 仓库

    有的公司内部开发一些私有包不想上传到公共平台 Npm 仓库,于是乎就搭建公司内部的私有 Npm 仓库,与 Npm 仓库其实差不多,只不过有一个是供全世界开发者使用的平台,一个是只供公司内部使用的平台。

02.

介绍下 npm 发布包的机制。以 Npm 仓库为例说明。

  • 告诉 npm 你想往哪个仓库发布包。

    往哪个仓库发布包也叫做设置上传/发布地址。这个过程记录在 package.json 文件中。publishConfig 属性就记录着仓库地址。我这里是 公司内部搭建的私有 npm 仓库,所以写了一个内部地址。如果是往 Npm 仓库 发布包,该属性可以省略不写。

    // package.json
    "publishConfig": {
        "registry": "http://localhost/repository/npm-hosted/"
     }
    
  • 申请进入仓库的权限。

    你要往指定仓库发布包,比如往 Npm 仓库 发布包,你得先登录上这个仓库,然后才能进行上传。这是因为 Npm 仓库得知道是谁进行了发布包这个动作,并且还要判断该用户是否有权限进行发布包。这就好比你往一个仓库运输货物,得在大门口登记一下,标明身份不是。如果你的账户名或密码错误,仓库管理员肯定要拦住你,因为你不具备权限进行运输货物。

    那么怎么获得进入仓库的账户号呢。以 Npm 仓库为例,登录 Npm 官网,在右上角有个 Sign up 按钮,点击进行注册。记录下有用信息:账户名密码邮箱。如果是公司内部搭建的私有 Npm 仓库,让管理员给你一个账户密码即可。

  • 进入仓库。

    就像往仓库运输货物一样,有了进入仓库的权限,那就先登录进入仓库,然后在进行货物上架。

    $ npm login
    
    Username: xxxx
    Password:
    Email: (this IS public) xxxxx@qq.com
    Logged in as xxxx on https://registry.npmjs.org/.
    

    为了安全起见,输入密码不会显示任何东西,你只需输入完成按回车即可,不用担心自己是否没有输入上。

    像上述代码所示就是登录成功的标志,并且最后一行可以看到我们是要往 https://registry.npmjs.org/ (Npm 仓库)上发布包的。

    小tip:

    每次登录都要手动输入 账户密码邮箱 这个步骤很是繁琐,有个简单的方法可以一步到位。以 账户: admin密码:admin123 为例进行说明。

    打开百度,搜索 base64 关键字,随便点开一个 base64 在线编码/解码 条目,在新窗口左侧/上测输入 admin:admin123 (也即:账户:密码 格式,中间有个英文格式的冒号),点击编码按钮进行编码得到编码后的值 YWRtaW46YWRtaW4xMjM=。打开 npm 配置文件 .npmrc 文件,默认路径为:C:\Users\Administrator\.npmrc,修改内部内容如下。此后再进行 $ npm login 时会自动记住账户密码,一路回车登录即可。

    _auth="YWRtaW46YWRtaW4xMjM="
    email=xxxx@qq.com
    
  • 发布包。

    前面一个步骤成功进入仓库,接下来就进行货物上架即发布包。

    切换到要发布那个包的根目录下,输入以下指令等待即可。

    $ npm publish 
    

    这个过程可能是遇到问题最多的地方。如果失败了,检查 C:\Users\Administrator\.npmrc 文件。一般的使用 Npm 都会配置淘宝镜像仓库,这样我们在下载 npm 包时会大大提升速度。操作如下:

    $ npm config set registry https://registry.npm.taobao.org
    

    此时打开 .npmrc 文件会看到变化如下:

    _auth="YWRtaW46YWRtaW4xMjM="
    email=xxxx@qq.com
    registry=https://registry.npm.taobao.org
    

    由于我们这里是往 Npm 仓库 发布包的,这里设置的下载地址是 淘宝镜像仓库,二者不一致会导致错误。可先将最后一行代码删除掉,此时默认下载仓库也是 Npm 仓库。下载仓库地址和上传仓库地址(前面提到的在 package.json 文件中设置的)保持一致才能发布包。发布完成后可以再设置下载仓库为淘宝镜像仓库。

    往公司内部私有 Npm 仓库发布包也要注意这个问题,要保证下载仓库和上传仓库都是 公司内部的 Npm 仓库。当然,大多数私有仓库都会设置代理地址,二者并不是一模一样,但是要知道都是内部 Npm 仓库即可。

  • 更新包。

    更新包和发布包操作步骤类似,唯一的区别是要修改下 package.json 中的 version 字段,你更新包,总得让包的版本变化一下吧。操作重复上面几步步骤。

03.

总结:

  • 下载地址。

    从哪个仓库下载 npm 包,国内一般选择淘宝镜像,为嘛?因为快呀。设置完成后可以在 npm 配置文件 C:\Users\Administrator\.npmrc 中进行查看。如果是从 Npm 仓库 下载,将 .npmrc 文件中 registry 那一行代码删掉即可。

    设置方式:

    $ npm config set registry https://registry.npm.taobao.org
    
  • 上传地址。

    自己开发一个 Node 模块,想往仓库发布共享出去,上传到哪个仓库。如果是往 Npm 仓库 上传,该属性可以不写,默认上传地址即为 Npm 仓库

    设置方式:

    // package.json
    "publishConfig": {
        "registry": "http://localhost/repository/npm-hosted/"
     }
    
  • 发布和更新包要保证上传地址和下载地址是同一个仓库的地址。

© 著作权归作者所有

共有 人打赏支持
dkvirus
粉丝 14
博文 102
码字总数 99310
作品 0
六安
程序员
npm 私服工具verdaccio 搭建(一) (ps:欲使用sinopia搭建私服的一定要看过来)

吐个槽(关于为什么用verdaccio ) 先跟大家吐个槽,其实我本来是用sinopia搭建的私服,也知道大家也都倾向于sinopia来搭,毕竟它出道比较早,知名度比较高,但是sinopia的作者两年前就已经停...

yyzzhc999
04/26
0
0
📦vue组件发布npm最佳实践

我们经常使用组件,二次封装或创造组件,在团队内部使用; 可当我们想通过npm分享组件时,却没了之前的得心应手,本文旨在帮助大家在可以更轻松地发布组件 首先,把vue组件发布到npm这件事可以...

levy9527
06/15
0
0
React Native Mac 下打包Android APK

打包的时候遇到了 好多坑 这里记录下~ 主要步骤: 1.android keystore签名的生成 gradle mac下环境变量的配置 3.android studio中的gradle配置。 4.打包 签名的生成 执行完之后,输入本机的 ...

JsLin_
06/18
0
0
手把手教你创建你的第一个 NPM 包

1.npm是什么? npm 是Node 的模块管理器,功能极其强大。 它是Node 获得成功的重要原因之一。 正因为有了npm,我们只要一行命令,就能安装别人写好的模块。 npm的基础知识这边就不做表述的,...

小钱钱阿圣
2017/07/21
0
0
少撸两局教你搭个博客玩

是不是羡慕别人都有自己的博客啊,是啊我也特别羡慕 。。。可以有个属于自己的地址,在上面敲敲写写。 然后自己开始捣鼓 折腾 最后成功了还是很开心。。。 接下来的博客模式是用 HEXO+Githu...

不空大的Timo
2017/09/03
0
0
NodeJS模块全面指南

NodeJS模块 所谓的NodeJS模块其实就是指NodeJS package,即nodejs包。 在使用NodeJS进行开发的时候,往往需要用到各种各样的第三方包。当然,很多时候我们在实际开发的时候自己也会按照功能或...

COLIN前端
2015/11/23
72
0
如何使用 npm 管理 NodeJS 包

前一段时间,我们发布了一个使用 pip 管理 Python 包的指南。今天,我们将讨论如何使用 npm 管理 NodeJS 包。npm 是最大的软件注册中心,包含 600,000 多个包。每天,世界各地的开发人员通过...

作者: Sk
05/07
0
0
npm 私服工具verdaccio 搭建(二) (ps:欲使用sinopia搭建私服的一定要看过来)

引言 上篇文章我写了关于verdaccio私服在服务端的搭建过程,这篇文章我来分享一下客户端如何与私服连接,下载私服的包以及更新和发布公司内部封好的包。(ps:全文中的http://192.168.XX.50默...

yyzzhc999
04/27
0
0
node+bower+gulp+webpack初见

node node模块管理是通过NPM(即 Node Package Manage,是 NodeJS 模块管理工具)来处理各模块之间的依赖。NPM按树状结构来管理的,支持某模块的不同版本。 [前提是本机已安装node、git环境]...

ifnotme
2016/08/03
144
0
大漠穷秋/NiceFish-Admin

NiceFish(美人鱼) NiceFish是一个系列教学项目,都是Angular这个技术栈。 NiceFish:美人鱼,这是一个微型Blog系统,前端基于Angular 4.x + PrimeNG。http://git.oschina.net/mumu-osc/Nic...

大漠穷秋
2017/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spark Streaming + Kafka Integration Guide

The Spark Streaming integration for Kafka 0.10 is similar in design to the 0.8 Direct Stream approach. It provides simple parallelism, 1:1 correspondence between Kafka partition......

刺猬一号
13分钟前
0
0
数据结构与算法2

一个数组的例子,实现查找,显示和删除的功能。 在这个数组中存储的数据类型是long型,使用long型为的是表明这是数据,而int型被用来表示下标。通常数据结构存储的数据项包含有好几个字段,所...

沉迷于编程的小菜菜
24分钟前
0
0
Python3 基于 requests 批量下载图片

Python3 基于 requests 批量下载图片 import requestsheaders = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encod......

leeyi
25分钟前
0
0
java获取当前时间所在一周的周一和周日日期

/** * 当前时间所在一周的周一和周日时间 * @param time 当前时间 * @return */ public static Map getWeekDate(String time) { Map map = new HashedMap(); SimpleDateFormat sdf = new Si......

小弱鸡
57分钟前
0
0
Redis数据的导出和导入(dump和load方式)

网上有些文章已经不再适用,本人也是踩了些坑,在此记录下。 迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式...

iplusx
今天
2
0
ElasticSearch 高亮显示大文档搜索结果

2016年12月,我们开始研究Ambar——一个文档搜索系统。Ambar使用ElasticSearch作为核心搜索引擎。 在Ambar开发的过程中,我们处理了很多与ES相关的问题,我们想分享我们得到的宝贵经验。让我...

九州暮云
今天
1
0
Python 使用 pywifi 模块 破解wifi密码

git https://github.com/awkman/pywifi 常见常量 from pywifi import const# Define interface status.IFACE_DISCONNECTED = 0IFACE_SCANNING = 1IFACE_INACTIVE = 2IFACE_CONNEC......

阿豪boy
今天
2
0
phpstorm使用Iedis

phpstorm的redis插件Iedis是真好用 看了网上挺多的文章,但是由于我系统还是ubuntu,就有点尴尬了,现在破解之后,留个笔记,即使自己之后有需要也可以很快翻阅 先下载资源 资源下载 zip压缩...

贤郎--均灵
今天
0
0
第三章 spring-bean之FactoryBeanRegistrySupport(4)

前言 从FactoryBeanRegistrySupport类的名字可以看出FactoryBeanRegistrySupport负责FactoryBean的注册与支持。如果想知道FactoryBean相关的资料,请阅读spring-bean中关于FactoryBean的解读...

鸟菜啊
今天
0
0
CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部