npm 发布包填坑指南

最近使用 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/"
     }
    
  • 发布和更新包要保证上传地址和下载地址是同一个仓库的地址。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具...
    build1024阅读 7,868评论 0 9
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,825评论 25 707
  • 原文 在中国,安装 & 升级 npm 依赖的正确方法 05 NOVEMBER 2016onnpm-check,cn...
    sunny635533阅读 14,696评论 1 3
  • 评估,找出问题,制定方案,说服,执行。表示没有看过MBA之类的书,所以当知道这些的时候,觉得自己要走的路还特别的遥...
    安择阅读 251评论 0 2
  • 苋菜梗过酒,前世不修。 苋菜梗三个字,我老家的读音如“酣菜光”。 苋菜梗是旧时农家常备的菜。苋菜长到一个多高,砍了...
    须弥山主人阅读 1,200评论 0 0