Skip to content

Xihaixin/EasyNote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

📝 EasyNote

EasyNote 是一个简单的命令行笔记工具,帮助你快速记录、管理和检索笔记。它使用 Node.js 内置的 SQLite 模块存储笔记,支持分级标签、时间戳和交互模式,让你的笔记管理更加高效。

⚡ 笔记默认保存在你的用户主目录下的 ~/.easynote/notes.db 文件中,也可自定义路径。
无需额外安装数据库驱动,直接使用 Node.js 原生能力,无编译烦恼。


🚀 特性

  • 快速添加笔记:一行命令即可记录想法,支持带空格的引号参数。
  • 🏷️ 分级标签:标签可包含斜杠表示层级(如 work/project1),便于精细分类。
  • 🔍 智能过滤:按标签前缀过滤笔记(例如 --tag work 匹配 work/project1)。
  • 🔎 全文搜索:按关键词搜索笔记内容。
  • ✏️ 编辑与删除:通过 ID 修改或移除笔记。
  • 🕒 时间戳:自动记录创建和更新时间。
  • 💬 交互模式:运行 easynote 进入交互式 shell,连续操作更流畅。
  • 📂 统一存储:笔记集中保存在 SQLite 数据库中,避免散落各处。
  • 🛡️ 错误处理:友好的错误提示,避免意外崩溃。
  • 🔒 数据安全:数据库文件权限自动设置为仅所有者可读写。

📦 安装

前置要求

  • Node.js v22.5.0 或更高版本(内置 node:sqlite 模块所需)
  • npm

步骤

  1. 克隆或下载本项目代码。
  2. 在项目目录下安装依赖:
    npm install
  3. (可选)将脚本链接到全局,方便直接使用 easynote 命令:
    npm link
    或者直接通过 node src/index.js 运行。

💻 使用方法

命令行模式

# 添加笔记(可带分级标签)
easynote add "买牛奶" --tags grocery,important
easynote add "完成项目文档" --tags work/project1,urgent

# 列出所有笔记
easynote list

# 按标签前缀过滤(支持分级标签)
easynote list --tag work
easynote list --tag work/project1

# 删除笔记(按 ID)
easynote delete 3

# 编辑笔记内容
easynote edit 2 "更新后的内容"

# 搜索笔记
easynote search 会议

# 查看帮助
easynote --help

交互模式

直接运行 easynote 不带任何命令,即可进入交互式 shell:

easynote>

支持的命令与命令行类似,但无需每次输入 easynote

  • add <内容> [--tags <标签>] - 添加笔记(内容可包含空格,用引号括起)
  • list [--tag <标签>] - 列出笔记
  • delete <id> - 删除笔记
  • edit <id> <新内容> - 编辑笔记
  • search <关键词> - 搜索笔记
  • help - 显示帮助
  • exit - 退出

示例:

easynote> add 完成报告 --tags work/project1
easynote> list --tag work
easynote> delete 1
easynote> exit

自定义数据库路径

通过 --db-path 选项可以指定数据库文件的存储位置:

easynote --db-path /path/to/my-notes.db add "自定义路径笔记"

注意:该选项必须放在命令之前,因为它是全局选项。


📁 数据存储

EasyNote 使用 SQLite 数据库存储笔记,包含以下字段:

  • id: 唯一标识
  • content: 笔记内容
  • tags: JSON 数组格式的标签列表(例如 ["work/project1","urgent"]
  • created_at: 创建时间
  • updated_at: 最后更新时间(通过触发器自动更新)

默认数据库位置:~/.easynote/notes.db(目录会自动创建,权限设置为 700)。

为提高查询性能,自动创建以下索引:

  • idx_content:加速内容搜索
  • idx_tags:加速标签过滤

🏗️ 项目结构

重构后的代码采用模块化设计,便于维护和扩展:

src/
├── index.js          # 主入口,CLI 配置
├── db.js             # 数据库连接、初始化、关闭
├── parser.js         # 命令行解析器(支持引号)
├── commands.js       # 所有命令处理函数
└── interactive.js    # 交互模式实现

所有模块均使用 ES 模块(import/export)并包含错误处理。


❓ 帮助

任何时候都可以通过以下命令获取帮助:

easynote --help

你会看到类似这样的指南:

Welcome to EasyNote v0.0.1

Store notes with tags and timestamps in a local SQLite database.
Default database: /Users/username/.easynote/notes.db

Usage: easynote <command> [options]

Commands:
  add <note>, a        Add a new note
  list, ls             List all notes
  delete <id>, rm      Delete a note by ID
  edit <id> <newContent>, ed  Edit a note's content
  search <keyword>, find  Search notes by keyword

Examples:
  easynote add "Buy milk" --tags grocery,important
  easynote list --tag work
  easynote delete 3
  easynote search meeting
  easynote   # Enter interactive mode

📋 示例

# 添加带分级标签的笔记
$ easynote add "下午3点开会" --tags meeting,work/project1
Note added (ID: 1)

# 添加无标签笔记(使用别名 a)
$ easynote a "记得买咖啡"
Note added (ID: 2)

# 列出所有笔记
$ easynote ls
Your notes:
[1] 下午3点开会 (创建: 2026-03-07 14:30:00) 标签: meeting, work/project1
[2] 记得买咖啡 (创建: 2026-03-07 14:31:00)

# 按标签前缀过滤
$ easynote list --tag work
Your notes:
[1] 下午3点开会 (创建: 2026-03-07 14:30:00) 标签: meeting, work/project1

# 搜索包含“咖啡”的笔记
$ easynote search 咖啡
Notes containing "咖啡":
[2] 记得买咖啡 (2026-03-07 14:31:00)

# 编辑 ID 为 2 的笔记
$ easynote edit 2 "买咖啡(已买)"
Note 2 updated.

# 删除 ID 为 1 的笔记
$ easynote rm 1
Note 1 deleted.

🤝 贡献

欢迎提交 Issue 或 Pull Request 来改进 EasyNote!
如果你有任何想法或建议,请随时参与贡献。


📄 许可证

MIT © EasyNote

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors