前言

我们经常使用npm来下载别人的模块或者说包,那么我们如何将自己写的模块上传到npm呢?

了解npm政策

在开始之前,最好回顾一下npm的政策,以防您对站点礼仪、命名、许可或其他指导原则有疑问。

发布包

1、创建用户帐户,要发布,您必须是npm注册表上的用户。如果您不是用户去npmjs.org注册一个npm的账号,或者使用npm adduser创建一个帐户。如果您在站点上创建了一个用户帐户,请使用npm登录从您的终端访问您的帐户。

2、验证邮箱

随便发点东西给邮箱就OK

3、登录

命令:npm login

4、查看当前用户

命令:npm whoami

检查您的用户名是否已添加到注册表https://npmjs.com/~username

5、新建一个文件夹并进入

6、初始化一些包的相关信息

命令:npm init

  • package name(包名字)
  • version(包版本)
  • description(包描述)
  • entry point(包里面主文件也就是入口地址)
  • test command(包的测试命令是什么,可以先不指定)
  • git repository(git地址,这样就可以从npm官网直接点到git上,可以先不指定)
  • keywords(关键字,别人搜东西时怎么搜到比较方便)
  • author(作者)
  • license: (ISC)(包遵循什么样的开源协议)

之后会生成一个package.json文件

7、新建一个文件用来存放包(模块)

8、发布包(模块)

命令:npm publish

9、在官网npmjs.org搜索查看我们上传的包(模块)

更新包

10、如果我们更新了包(模块)

  • 首先修改package.json文件中的版本

  • 然后执行命令npm publish发布新版本

  • 在官网查看

删除包

11、如果我们想要删除包(模块)

这里要说一点,取消发布包可能并不像你想象得那么容易,这种操作是受到诸多限制的,撤销发布的包被认为是一种不好的行为(试想一下你撤销了发布的包[假设它已经在社区内有了一定程度的影响],这对那些已经深度使用并依赖你发布的包的团队是件多么崩溃的事情!)

  • 首先如果就是想要删除当前的这个版本,执行命令npm unpublish xxx(包名),去官网查看发现已经没有这个包了,如果权限不够加上 --force

  • 使用命令npm unpublish xxx@1.1.1(包名@版本名)删除指定版本
  • 根据规范,只有在发包的24小时内才允许撤销发布的包( unpublish is only allowed with versions published in the last 24 hours),需要我们发邮件给官方来删除
  • 即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被“占用”了)
  • 例如我在撤销包后尝试再发布同一名称+同一版本的包

报错,并建议我修改包的版本

npm unpublish的推荐替代命令:npm deprecate <pkg>[@<version>] <message>

使用这个命令,并不会在社区里撤销你已有的包,但会在任何人尝试安装这个包的时候得到警告

例如:npm deprecate penghuwanapp '这个包我已经不再维护了哟~'

注意事项

  • 【注意点1】不能和已有的包的名字重名!
  例如我尝试把包名改成'react'显然已有的包:
  

  然后发包的时候就会...

  

  (翻译:你没有发布react包的权限,请问你是以react所有者的身份登陆的吗?)

  【提示】在发包前可以通过npm的搜索引擎查找是否已存在相同名称的包

  • 【注意点2】还有一点要注意的是npm对包名的限制:不能有大写字母/空格/下滑线!

  (其实在上面的例子中我原本打算写成penghuwanAPP的,报错。。。改成penghuwan_app,又报错,最后不得不改成penghuwanapp。。。)

  

   

  • 【注意点3】你的项目里有部分私密的代码不想发布到npm上?

  将它写入.gitignore 或.npmignore中,上传就会被忽略了

 

npm学习(七)之如何发布包、更新发布包、删除发布包的更多相关文章

  1. npm学习(四)之如何安装全局包、更新全局安装的包、卸载全局安装的包

    如何安装全局包 有两种方式用来安装 npm 包:本地安装和全局安装.选用哪种方式来安装,取决于你如何使用这个包. 如果你想将其作为一个命令行工具,那么你应该将其安装到全局.这种安装方式后可以让你在任何 ...

  2. npm学习(三)之如何安装本地包、更新本地安装的包、卸载本地安装的包

    如何安装本地包 有两种方式用来安装 npm 包:本地安装和全局安装.至于选择哪种方式来安装,取决于我们如何使用这个包. 如果你自己的模块依赖于某个包,并通过 Node.js 的 require 加载, ...

  3. npm 学习笔记

    一.介绍 1.是什么 npm 全称是 Node Package Manager,即 Node 包管理工具. 但是发展到后来,并不仅是适用于 node.js 的包. 所以现在看 node_modules ...

  4. npm学习(九)之README.md文件

    包括文档(readme.md) npm建议您包含一个readme文件来记录您的包.自述文件必须有文件名readme.md.文件扩展名.md表示该文件是一个标记(markdown)文件.当有人发现您的包 ...

  5. npm学习(十三)之npm命令

    npm:查看npm所有命令 自己写包可能用到的命令: npm adduser:注册 npm login:登录 npm whami:查看当前用户名 npm init:初始化包的信息 npm publis ...

  6. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  7. NPM 学习笔记整理

    NPM 学习笔记整理 阅读 550,2017年06月04日 发布,来源:blog.ihoey.com 什么是 NPM npm 之于 Node ,就像 pip 之于 Python , gem 之于 Ru ...

  8. day 85 Vue学习七之vue-cookie

      Vue学习七之vue-cookie   通过vue如何操作cookie呢 参考链接:https://www.jianshu.com/p/535b53989b39 第一步:安装vue-cookies ...

  9. iOS学习网站及大牛网址(实时更新)

    iOS学习网站及大牛网址(实时更新) 学习网站 https://github.com/Tim9Liu9/TimLiu-iOS  自己总结的iOS.mac开源项目及库 https://github.co ...

随机推荐

  1. Android学习_7/24

    一.           活动的生命周期 1.        活动状态 运行:位于返回栈栈顶 暂停:不在栈顶,但仍可见 停止:不在栈顶,完全不可见 销毁:从栈中移除 2.        活动的生存期 ...

  2. 「CQOI 2014」危桥

    题目链接 戳我 \(Solution\) 首先往返\(n\)次等价于走\(2n\)次. 将 \(a_n*2,b_n*2\); 那么我们直接按原图构图,然后: \((S,a_1,a_n),(S,b_1, ...

  3. Spring boot之MyBatis

    文章目录1. 环境依赖2. 数据源2.1. 方案一 使用 Spring Boot 默认配置2.2. 方案二 手动创建3. 脚本初始化4. MyBatis整合4.1. 方案一 通过注解的方式4.1.1. ...

  4. Spring boot之全局异常捕捉

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...

  5. 剑指offer:把一个支付算转化为整数

    1:首先,根据课本上的程序,是这样的: #include "stdafx.h" #include "iostream" using namespace std; ...

  6. 套接字I/O函数write/read writev/readv send/recv sendto/recvfrom sendmsg/recvmsg

    函数原型 read/write系原型 #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); #include ...

  7. Adding property to a json object in C#

    Adding property to a json object in C#   you can do it with a dynamic object dynamic obj = JsonConve ...

  8. 使用asio进行异步下载http

    下面是官方demo, 给人耳目一新的感觉,以前是总是把c++当成有类功能的C,看完这个感觉不用自己造轮子了,还是要跟上时代的步伐 // // async_client.cpp // ~~~~~~~~~ ...

  9. BOSCH汽车工程手册————混合驱动

    首先放一波资源,一千两百多页的pdf 链接:https://pan.baidu.com/s/15IsvHqOFCnqAKwY_SR4-lA提取码:6wmz 混合驱动 混合驱动有串联驱动并联驱动以及两种 ...

  10. leetcode 215 第K个最大的元素

    此问题可转化为Top K问题进行考虑,当用小顶堆选出K个最大值时,堆顶的元素即为第k大的元素 class Solution { public: int findKthLargest(vector< ...