💾相关资料
一、如何使用yargs
-
创建文件夹:
mkdir yargs_practice -
进入文件夹:
cd yargs_practice -
创建或更新文件:
touch yargs.js -
创建package.json(-y表示自动回答所有问题为yes):
npm init -y -
安装yargs:
npm i yargs -
编辑yargs.js:
const yargs = require("yargs");
const argv = yargs.argv;
console.log(argv);
- 运行:
node yargs.js add --new thing --old="stuff"
- 输出:
调整package.json配置
PS:
在 package.json 文件中,bin 字段用于指定一些可执行文件的路径。
bin的配置使全局可用,而不用输入地址!
创建一个CLI
创建一个脚本文件:touch line-count
#!/usr/bin/env node 是一个 shebang 行的实例,它告诉我们的系统用node.js解释器来执行该文件。
【Shebang 出现在脚本文件的第一行的最前面,用于指示操作系统如何执行该脚本文件。通常会跟着解释器的绝对路径。#!/usr/bin/env python3,这表示该脚本应该使用 Python 3 解释器来执行。在一个 Node.js 脚本中,你可能会看到 #!/usr/bin/env node,这表示该脚本应该使用 Node.js 来执行】
.usage('Usage: $0 <command> [options]')这行代码设置了当用户在命令行中输入错误的命令或参数时显示的使用信息。
【例如,如果你的脚本名为 line-count,并且它有一个命令 count,那么使用信息将会是:Usage: line-count count [options]】
.command("count", "Count the lines in a file")这行代码定义了一个名为 count 的命令,描述为 "Count the lines in a file"。
.example("$0 count -f foo.js", "count the lines in the given file")这行代码提供了一个使用 count 命令的示例。
.alias('h', 'help') 为选项 -h 创建了一个别名,即 --help。(file同理)
.nargs("f", 1)这行代码指定 f 选项需要一个参数。
.describe("f", "Load a file")这行代码为 f 选项提供了描述信息 "Load a file"。
.demandOption(["f"])这行代码指定 f 选项是必需的。
.help('h') 添加了一个帮助选项。当用户在命令行中输入 -h 或 --help 时,将显示帮助信息。
添加程序逻辑
// Create stream with the file=
const s = fs.createReadStream(argv.file);
//`fs.createReadStream(argv.file)` 创建了一个指向 `argv.file` 文件的可读流。`fs` 是 Node.js 的文件系统模块,它提供了一些用于处理文件的 API。`createReadStream` 是 `fs` 模块的一个方法,它创建一个新的可读流。
//`argv.file` 是 yargs 解析命令行参数后的结果。在你的 `line-count` 脚本中,你使用 yargs 的 `.alias("f", "file")` 方法定义了一个名为 `f` 的选项,它的别名是 `file`。因此,`argv.file` 就是 `-f` 或 `--file` 选项的值,也就是用户指定的要计算行数的文件的名字。
var lines = 0;
s.on("data", (buf) => {
// 计算行数
lines += buf.toString().match(/\n/g).length;
});
s.on("end", () => {
// Display the number of lines
console.log(lines);
});
二、开始开发
- package.json的配置
{
"name": "yapi",
"version": "0.0.1",
"description": "",// 项目的描述
"keywords": [...],//项目的关键词,用于帮助其他人在搜索时找到你的项目。
"license": "MIT",
"author": {
"name": "",
"email": ""
},
"sideEffects": false,//项目的副作用信息,这里设置为 false,表示项目的代码没有副作用,可以进行 tree-shaking 优化。如果你的代码有副作用(例如,一些代码在导入时会执行某些操作,或者修改全局对象),那么你需要在 sideEffects 字段中指定这些有副作用的文件。例如:"sideEffects": ["./src/some-side-effectful-file.js"]
"main": "lib/cjs/index.js",//项目的主入口文件
"module": "lib/esm/index.js",// 项目的模块入口文件
"types": "lib/esm/index.d.ts",//项目的类型定义文件
"bin": {//项目的命令行接口入口文件,配置后可以通过 npm install -g 安装后使用命令行调用。npm 会在系统的 PATH 中创建一个链接,链接到你在 bin 字段中指定的文件。注意,bin 字段指定的文件必须具有可执行权限,并且文件的顶部必须包含 #!/usr/bin/env node 这一行,以告诉系统这是一个 Node.js 脚本。
"htapi": "lib/cjs/cli.js"
},
"files": [
"lib"//项目发布时包含的文件或目录,这里只包含 "lib" 目录。
],
"scripts": {
"build": "haoma compile"//项目的脚本命令,这里定义了一个 "build" 命令,执行 "haoma compile"。
},
"husky": { // Husky 的配置,用于在 Git 钩子中运行脚本,这里在 pre-commit 钩子中运行 "lint-staged"。
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": { //lint-staged 的配置,用于在 Git 钩子中对暂存的文件进行 lint 检查和格式化。
"*.{css,less,scss,sass,html,htm,vue,yml,yaml,json,md}": [
"prettier --write"
],
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
]
},
"dependencies": {
//项目的生产依赖
},
"devDependencies": {
//项目的开发依赖
},
"engines": {
"node": ">=10.19.0"//: 项目支持的 Node.js 版本
}
}
-----------------------------------------待补充的分割线----------------------------------------
Husky的使用
学习参考文档:4ark.me/post/weekly…
PS:npm link的作用
npm link 是一个在本地开发和测试 Node.js 包时非常有用的命令。它允许你在本地安装并使用一个还在开发中的包,就像它已经被发布并安装了一样。
npm link 的工作原理是在全局 node_modules 目录中创建一个符号链接,指向你正在开发的包的目录。这样,你就可以在其他项目中通过 npm link [包名] 命令来使用这个包,而不需要每次修改后都重新发布和安装。
例如,如果你正在开发一个名为 my-package 的包,并且你想在另一个项目中使用它,你可以在 my-package 的目录中运行 npm link,然后在另一个项目的目录中运行 npm link my-package。这样,无论你在 my-package 中做了什么修改,另一个项目都可以立即看到。
当你完成开发并准备发布包时,可以使用 npm unlink 命令来移除这个链接。