npm 包的创建发布和使用

一、新建一个npm账号

npm官网

二、登录账号,新建一个组织

npm 包的创建发布和使用_第1张图片
npm 包的创建发布和使用_第2张图片

三、创建一个npm包、发布

  • 新建一个文件夹npm_test_158
  • 在npm_test_158目录下执行npm init -y,npm_test_158目录下生成package.json文件,工程入口默认index.js
  • 在npm_test_158下新建文件,先简单暴露出两个方法作为npm包的功能;
    npm 包的创建发布和使用_第3张图片

4、发布

  • 首先我们要明确,我们要将包发布到npm官网,所以先将我们的镜像网址设置为https://registry.npmjs.org/

在这里插入图片描述

  • 其次,首次发布需要登录和关联组织
    登录,密码不可见,正常输入就行
    npm 包的创建发布和使用_第4张图片
    发布到npm社区需要先关联目标组织
    npm 包的创建发布和使用_第5张图片
    –scope 参数就是上图中新建的名称
    npm 包的创建发布和使用_第6张图片

  • 然后执行发布,最后一行出现”+包名+版本号“时说明发布成功;

npm 包的创建发布和使用_第7张图片

五、引用包

现在我们在另一个工程中安装我们上面定义的包
npm 包的创建发布和使用_第8张图片

import utils from '@loops.org/npm_test_158';

 button.onkeydown = (e) => {
        console.log(utils.getKey(e));
 };

六、错误合集

  • 登录时报错,去设置npm config set registry https://registry.npmjs.org/

npm 包的创建发布和使用_第9张图片

  • 发布时404,先去执行 npm init --scope=loops.org 参数根据自己的修改
    npm 包的创建发布和使用_第10张图片
  • 发布时 403,看报错是由于版本问题,非首次发布,需要修改版本号,命令行或package.json文件修改都可以
    npm 包的创建发布和使用_第11张图片

七、一个自定义cli的实现

上面展示了一个npm 包暴露出一些方法等,下面尝试一下自定义一个cli 命令并执行;

  • 我们定义一个数组join转字符串并输出的简单命令,命令功能有点蠢,重在演示流程;

还是同样的工程,index.js文件我们改为:

#!/usr/bin/env node
// #!/usr/bin/env node 指明在外部执行当前自定义命令时,会执行当前文件
const { program } = require('commander');
/** 定义命令入参 --myArr, 简写-m */
program.option('-m,--myArr').option('-s,--split');

program.parse();

const options = program.opts();
/** program.args 命令的参数数组  以 node index.js -m [1,2,3]  -s "、"  为例 program.args=['[1,2,3]','、']  */
console.log(JSON.parse(program.args[0]).join(program.args[1]))

package.json配置

// join 即为我们暴露出的命令名称
 "bin": {
    "join": "index.js"
  },

按前面提过的步骤发包;发包成功,在另一个工程安装最新包;

在应用的工程中 package.json 定义一个命令

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "adminjoin":"join -m [1,2,3] -s  '、'"
  }

命令行运行 npm run adminjoin,你会看到命令行输出 ‘1、2、3’,

当然,也可以执行使用npx 命令,直接安装并执行

npx @loops.org/npm_test_158 -m [1,2,3] -s '、'

npx 命令会将包下载到一个临时的目录,执行的时候,会先去找要安装的包是否存在,不存在安装,存在直接执行对应命令;在项目开发中,需要注意,每次执行npx的时候需要先判断下当前一存在的npm 包是否为最新版本,是最新版本直接使用,不是最新版本需要重新安装;

========================
后续会实现一个脚手架cli,更新

你可能感兴趣的:(npm,node.js,前端)