NPM-发布自己的 npm 包

677 阅读5分钟

发布自己的NPM包

1 注册自己的 npm 账号

进入 npm官网 注册账号

2 创建一个空的文件夹,进入

2.1 创建一个默认的npm包

在当前文件夹中执行控制台命令:

npm init
  • 执行npm init之后需要一步一步的填写对应信息,这些信息也就是你的npm的信息,在生成的package.json中会自动填入(如下图)
  • 可以执行npm init -y, 这样就会帮你创建一个默认配置的package.json而不需要自己一步步配置
  • 注意【包名不能包含大写字母】
//默认配置的package.json如下所示:
{
  "name": "npm-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

2.2 创建一个index.js文件作为包入口文件

当然这是默认的入口文件,如果有其他想法的话,完全可以在package.json中进行修改。

2.3 编写index.js

index.js就是你这个包的入口文件,你可以在里面做你想要的操作

//exports.testDemo = function() {
  console.log("this is test demo!!!!!!");
//};

2.4 通过node 执行index.js中的内容

node index.js 

// 打印结果:this is test demo!!!!!!

3 发布npm包

3.1 登录npm(添加用户)

添加npm用户,或者说登录你的npm账号

 npm adduser
  • 输入用户名,密码,邮箱

3.2 npm publish

当你成功登录之后,就可以发布你的npm包了。

npm publish

3.3 可能你在publish的时候会出现如下错误

那么可能性有两个:

  1. 你没有执行npm adduser进行登录
  2. 可能你的包名重复了。 如这里的npm-demo可能重复了所以导致无法publish上,这时最简单的方法是改包名,加上一个特殊的标志即可,改包名只需要对package.json中的name进行修改即可。(此处我将npm-demo改成npm-demo-crk之后再次执行npm publish就成功了)

错误情况2

code E402
402 Payment Required - PUT 
http://registry.npmjs.org/@dinghx%2funifiedValidator 
- You must sign up for private packages

这是因为包名是 @xxx/xxxx npm会认为要发布私包,私包需要收费,需将发布命令改成

执行:

npm publish --access public

错误情况3

code E403
code E403  没权限发布
npm ERR! [no_perms] Private mode enable, only admin can 
publish this module [no_perms] 
Private mode enable, only admin can publish
this module: your-package

这个是你的源设置成第三方源的时候才有可能发生,比如设置了淘宝源就可能会导致该问题。只要把源改回默认的就可以了,如下

执行:

npm config set registry http://registry.npmjs.org

错误类型:包名相似

npm ERR! Package name too similar to existing packages; 
try renaming your package to '@dinghx/captcha' and publishing 
with 'npm publish --access=public' instead : your-package

错误类型: 邮箱没有校验

npm ERR! you must verify your email before publishing a new package
: https://www.npmjs.com/email-edit : your-package

这是邮箱没有校验,登录www.npmjs.com 重新发起邮箱验证

4、引用npm包

4.1、创建一个案例

想要引用npm包首先你要有个基本的案例,创建这个案例的方法和创建npm包其实是差不多的:

执行:npm init -y 创建一个index.js的入口文件 这样就创建了一个案例了.

4.2、下载依赖包

创建完案例之后就是引入npm包了

执行:npm install -save-dev crk-demo-crk (或者: npm install crk-demo-crk)

4.3、调用npm包中的文件

通过require来调用文件从而引用npm包中的方法

var test = require("npm-demo-crk");
test.testDemo();

4.4、运行

执行命令即可运行案例,可以看到控制台成功调用了方法打印出了日志

node index.js

5、更新npm包

5.1、更改版本号

最简单方式无非就是改package.json关于版本 或者可以执行命令: npm version 1.0.1 同样可以起到作用

5.2、更新版本——发布版本

更新npm包同样是执行npm publish即可, 可以看到publish的包已经更新了

5.3、更新依赖包

同样是执行: npm install -save-dev crk-demo-crk 这样会更新最新的包到node_module中 当然可能由于各种原因导致你更新的包还没有在npm上更新或者说你更新下来的依旧是旧的包。

6、撤销发布的npm包

我们现在发布的这个npm包只是测试用的或者只是用作其他作用而不是要发布到网上真的使用的,最好还是撤销下来。

执行命令:

npm  unpublish npm-demo-crk【包名】 --force

需要注意的是: 1、撤销npm包需要加上 --force强制执行才可以实现; 2、撤销的包不能立马再次发布

注意包名包含红色框中的所有单词

撤销的包不能立马再次发布

扩展:

npm 3种方式修改源

1、终端安装

此方式为一次性使用,每次安装(或查看)都要带上 --registry 选项

npm install PACKAGE_NAME --registry https://registry.npm.taobao.org
npm info PACKAGE_NAME --registry https://registry.npm.taobao.org

2、设置 npm 的配置项

此方式为设置全局的 npm 配置项,即使关闭终端或重启电脑都不会失效。

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

还有其他常用命令:

npm config list -l             # 查看所有配置项
npm config get [<key>]         # 查看某一项的配置信息
npm config set <key> <value>   # 设置某一项的配置信息

3、使用 .npmrc 文件

此方式同样为全局有效,但没有修改原始的配置项。 需要在用户目录下创建 .npmrc 文件,添加如下内容:

registry = http://registry.npm.taobao.org 【registry.npm.taobao.org 也可以改为自己公司私用的npm源地址】

当你使用第2种方式修改配置项后,你会惊奇的发现,它其实与第三种相同,也会在用户目录下创建一个 .npmrc 文件。

【项目里面如果和package.json同级存放了这个.npmrc那么就可以实现,仅仅对于这个项目,换npm的源了】

npm link的使用

功能:在本地开发npm模块的时候,我们可以使用npm link命令,将npm 模块链接到对应的运行项目中去,方便地对模块进行调试和测试

使用方法

1. 创建链接

在这里,我们有两个项目,一个是npm-link-module,是我们要开发的npm模块,另一个是npm-link-example,是我们要运行npm模块的项目

  • 首先,进入我们的npm-link-module项目,执行npm link 【会生成一个文件夹的快捷方法】
cd npm-link-module
npm link

执行命令后,npm-link-module会根据package.json上的配置,被链接到全局,路径是{prefix}/lib/node_modules/<package>,这是官方文档上的描述

npm config get prefix
// 命令获取到prefix的值
// (不过我这里使用的是windows,实际被链接到的路径是C:\Program Files\nodejs\node_modules\npm-link-module

具体链接 www.jianshu.com/p/aaa7db89a…