Node.js第一课:实现简易的命令行任务管理器

Node.js简介

  • Node.js不是语言,是JavaScript的运行环境
  • 基于Chrome V8引擎,使JS可以脱离浏览器运行
  • 异步非阻塞I/O模型,适合高并发场景
  • 应用场景:Web服务、API开发、CLI工具、微服务等

第一个Node程序

创建项目结构

go 复制代码
task-manager/
├── package.json
├── index.js
└── tasks.json  运行index.js后自动生成

package.json 配置

json 复制代码
{
  "name": "task-manager",
  "version": "1.0.0",
  "description": "命令行任务管理器",
  "main": "index.js",
  "bin": {
    "task": "./index.js"
  },
  "scripts": {
    "start": "node index.js"
  }
}

index.js 内容

javascript 复制代码
#!/usr/bin/env node

const fs = require('fs');
const path = require('path');

// 任务文件路径
const TASK_FILE = path.join(__dirname, 'tasks.json');

// 初始化任务文件
function initTasks() {
  if (!fs.existsSync(TASK_FILE)) {
    fs.writeFileSync(TASK_FILE, JSON.stringify([], null, 2));
  }
}

// 读取任务
function loadTasks() {
  try {
    const data = fs.readFileSync(TASK_FILE, 'utf8');
    return JSON.parse(data);
  } catch (error) {
    return [];
  }
}

// 保存任务
function saveTasks(tasks) {
  fs.writeFileSync(TASK_FILE, JSON.stringify(tasks, null, 2));
}

// 添加任务
function addTask(description) {
  const tasks = loadTasks();
  const newTask = {
    id: Date.now(),
    description,
    completed: false,
    createdAt: new Date().toISOString()
  };
  tasks.push(newTask);
  saveTasks(tasks);
  console.log(`✅ 任务添加成功: ${description}`);
}

// 列出任务
function listTasks() {
  const tasks = loadTasks();
  
  if (tasks.length === 0) {
    console.log("📝 还没有任务,快添加一个吧!");
    return;
  }
  
  console.log("\n📋 你的任务列表:");
  tasks.forEach((task, index) => {
    const status = task.completed ? '✅' : '⏳';
    console.log(`${index + 1}. ${status} ${task.description}`);
  });
}

// 完成任务
function completeTask(index) {
  const tasks = loadTasks();
  if (index >= 0 && index < tasks.length) {
    tasks[index].completed = true;
    saveTasks(tasks);
    console.log(`🎉 任务完成: ${tasks[index].description}`);
  } else {
    console.log("❌ 任务不存在");
  }
}

// 删除任务
function deleteTask(index) {
  const tasks = loadTasks();
  if (index >= 0 && index < tasks.length) {
    const deleted = tasks.splice(index, 1)[0];
    saveTasks(tasks);
    console.log(`🗑️ 任务删除: ${deleted.description}`);
  } else {
    console.log("❌ 任务不存在");
  }
}

// 主函数
function main() {
  initTasks();
  
  const [,, command, ...args] = process.argv;
  
  switch (command) {
    case 'add':
      if (args.length > 0) {
        addTask(args.join(' '));
      } else {
        console.log("❌ 请提供任务描述");
      }
      break;
      
    case 'list':
      listTasks();
      break;
      
    case 'done':
      if (args.length > 0) {
        completeTask(parseInt(args[0]) - 1);
      } else {
        console.log("❌ 请提供任务编号");
      }
      break;
      
    case 'delete':
      if (args.length > 0) {
        deleteTask(parseInt(args[0]) - 1);
      } else {
        console.log("❌ 请提供任务编号");
      }
      break;
      
    default:
      console.log(`
        使用说明:
          node index.js add <任务描述>  添加任务
          node index.js list           列出所有任务
          node index.js done <序号>    标记任务为完成
          node index.js delete <序号>  删除任务
      `);
  }
}

main();

运行与测试

bash 复制代码
# 添加任务
node index.js add "学习Node.js"
node index.js add "完成第一个项目"

# 查看任务
node index.js list

# 完成任务
node index.js done 1

# 删除任务
node index.js delete 2

知识点总结

  • CommonJS模块系统 :使用 require导入模块

  • 核心模块fs(文件系统)、path(路径处理)

  • 全局对象process获取进程信息

  • JSON操作:读写JSON文件

  • 命令行参数process.argv处理用户输入

相关推荐
军哥全栈AI3 小时前
Windows11 彻底卸载Node.js(无残留,适配所有版本)
npm·node.js
困惑阿三3 小时前
全栈部署排雷手册:从 405 报错到飞书推送成功
服务器·前端·后端·nginx·阿里云·node.js·飞书
Andytoms3 小时前
Node.js 版本和 pnpm 版本的对应关系
node.js
头发多多程序媛1 天前
解决依赖下载报错,npm ERR! code EPERM
前端·npm·node.js
fanjinzhi1 天前
Node.js通用计算15--TypeScript介绍
javascript·typescript·node.js
light blue bird1 天前
MES/ERP的Web多页签报表系统
数据库·node.js·ai大数据·mes/erp·web报表
Doris8931 天前
【Node.js 】Node.js 与 Webpack 模块化工程化入门指南
前端·webpack·node.js
alanesnape1 天前
在 Surface Pro X (ARM64) 上成功部署 Claude Code 的完整复盘
git·node.js·claude code部署·msys2clangarm64·美区apple id·礼品卡支付·surface pro x
MuShan-bit1 天前
CSDN-推荐开源项目-auto-x-to-wechat
爬虫·微信·开源·node.js·twitter