npm包开发流程

  1. 初始化项目
    ├── package.json
    └── src
    ├── bin.ts
    └── index.ts

首行是 Hashbang, Hashbang是一种特殊的注释,以 #! 开头,通常出现在可执行的脚本文件的第一行,用于告诉系统要使用哪个解释器来执行该脚本文件。

#!/usr/bin/env node
const argvs = process.argv.slice(2)
console.log('argvs', argvs)

console.log('Hello, world!')
  1. 开发&构建
    使用 tsup 构建,支持设置多个入口文件,构建后会有 dist/bin.js 文件,这个就是我们最后实际运行的文件
{
  "scripts": {
    "build": "tsup src/index.ts src/bin.ts --target es6 --format cjs,esm --dts",
    "dev": "tsup src/index.ts src/bin.ts --target es6 --format cjs,esm --dts --watch"
  }
}
  1. package.json bin 属性 用来指定命令行工具的入口文件
{
  "bin": {
    "hello-node": "dist/bin.js"
  }
}
  1. 安装&测试

项目内测试:当我们本地安装这个包的时候,就会在 node_modules/.bin 目录下生成一个 hello-node 的可执行文件,这个文件就是我们的命令行工具;npx hello-node 来运行这个命令;

全局使用:在项目根目录下,cmd,可以通过 npm link --global 将这个包链接到全局,模拟发布到本地,可用于模拟安装依赖,然后在某个测试文件夹下,cmd,npm init -y,pnpm link --global hello-node模拟安装hello-node依赖,如hello-node的package.json下的bin对应的命令即scan-word,即相当于执行依赖包项目性爱的src/index.js文件;测试cmd执行scan-word

如果这个包被发布到了 npm 上,咱们就可以直接 npm i -g xxx 直接安装启用。

  1. 使用框架
    命令行框架 Commander 使用框架,可以简化命令行参数的解析和校验,提高开发效率,并自动生成友好的提示信息。

先安装依赖:npm i commander
创建一个文件: src/commander-test.ts

#! /usr/bin/env node


// 引入Command类和package.json文件
import { Command } from 'commander'
import pkg from '../package.json'
// 创建程序实例并设置版本号
const program = new Command()
program.version(pkg.version)
// 添加命令hello和描述,别名为h,支持选项--exclude和--allow-dirty
program
  .command('hello [name]')
  .description('打招呼')
  .alias('h')
  .option('-e, --exclude <globPatterns...>', '排除某些文件进行扫描')
  .option(
    '--allow-dirty',
    '默认屏蔽以下目录(node_modules,.git等),可以设置允许'
  )
  .action((name, options) => {
    console.log('你好', name, options.exclude, options.allowDirty)
  })
// 解析命令行参数
program.parse(process.argv)

然后将这个文件添加到构建指令里,构建出 dist 目录下的资源。

设定指令 node-hello

{
  "bin": {
    "hello-node": "dist/bin.js",
    "node-hello": "dist/commander-test.js"
  }
}


参考&感谢各路大神

node

posted @ 2024-08-02 23:23  安静的嘶吼  阅读(13)  评论(0编辑  收藏  举报