CLI工具开发实战,一键下载美女图片

引言

大家好,我是倔强青铜三。是一名热情的软件工程师,我热衷于分享和传播it技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我。

本文将带你从零开始,使用JavaScript和Node.js打造一个实用的CLI工具,可以一键下载网页中的美女图片,并发布到NPM,方便全球开发者安装和使用。


一、项目背景与需求分析

在前端开发中,我们经常需要处理网络图片资源。手动下载网页中的美女图片既繁琐又耗时,因此,我们需要一个自动化工具来完成这一任务。本文将介绍如何使用JavaScript、Node.js及相关第三方库,打造一个可以下载并保存网页中图片的CLI工具,并发布到NPM供他人使用。


二、技术选型与工具准备

  1. JavaScript:主要编程语言。
  2. Node.js:运行环境,建议使用v14.0.0及以上版本。
  3. 第三方库

    • axios:^0.21.1,用于发送HTTP请求。
    • cheerio:^1.0.0-rc.3,用于解析HTML文档。
    • yargs:^16.2.0,用于处理命令行参数。

在开始之前,请确保已安装Node.js和npm。


三、实现步骤

1. 初始化项目

mkdir beauty-image-downloader
cd beauty-image-downloader
npm init -y

2. 安装依赖

npm install axios@0.21.1 cheerio@1.0.0-rc.3 yargs@16.2.0

3. 编写CLI工具代码

在项目根目录下创建index.js,并编写以下代码:

const axios = require('axios');
const cheerio = require('cheerio');
const fs = require('fs');
const path = require('path');
const yargs = require('yargs/yargs');
const { hideBin } = require('yargs/helpers');

// 定义命令行接口
const argv = yargs(hideBin(process.argv))
  .option('url', {
    alias: 'u',
    type: 'string',
    description: 'The URL of the webpage containing images'
  })
  .option('directory', {
    alias: 'd',
    type: 'string',
    description: 'The directory to save the downloaded images',
    default: 'downloads'
  })
  .argv;

// 检查是否提供了URL参数
if (!argv.url) {
  console.error('Please provide a URL using --url or -u.');
  process.exit(1);
}

// 发送HTTP请求获取网页内容
axios.get(argv.url)
  .then(response => {
    const html = response.data;
    const $ = cheerio.load(html);
    const imageUrls = [];

    // 查找所有的图片标签并收集URL
    $('img').each((index, element) => {
      const imgUrl = $(element).attr('src');
      if (imgUrl) imageUrls.push(imgUrl);
    });

    // 确保下载目录存在
    if (!fs.existsSync(argv.directory)) {
      fs.mkdirSync(argv.directory, { recursive: true });
    }

    // 下载图片并保存到指定目录
    imageUrls.forEach(imgUrl => {
      const fileName = path.basename(imgUrl);
      const filePath = path.join(argv.directory, fileName);

      axios({
        url: imgUrl,
        responseType: 'stream',
      }).then(response => {
        response.data.pipe(fs.createWriteStream(filePath))
          .on('finish', () => {
            console.log(`Downloaded ${fileName} to ${argv.directory}`);
          });
      }).catch(error => {
        console.error(`Failed to download ${imgUrl}: ${error.message}`);
      });
    });
  })
  .catch(error => {
    console.error(`Failed to fetch the webpage: ${error.message}`);
  });

代码解释

  • 引入依赖:包括axioscheeriofspathyargs
  • 定义命令行接口:使用yargs处理命令行参数,定义urldirectory选项。
  • 检查URL参数:确保用户提供了URL。
  • 发送HTTP请求:使用axios.get获取网页内容。
  • 解析HTML并收集图片URL:使用cheerio遍历图片标签。
  • 确保下载目录存在:使用fs.existsSyncfs.mkdirSync
  • 下载图片:遍历图片URL,使用axios下载并保存到指定目录。

四、发布到NPM

  1. 登录NPM账号(如果没有,请先注册):
npm login
  1. 在项目根目录下发布
npm publish

五、安装与使用

  1. 全局安装你发布的CLI工具
npm install -g beauty-image-downloader
  1. 使用CLI工具下载图片
beauty-image-downloader --url https://example.com/page-with-images --directory my-images

如果一切正常,你将在my-images目录中看到下载的美女图片。


六、总结与展望

本文介绍了如何使用JavaScript、Node.js及相关第三方库打造一个可以下载网页中图片的CLI工具,并发布到NPM供他人使用。这个工具虽然简单,但非常实用,而且可以根据需要进行扩展和优化。希望这篇文章能够激发你对JavaScript和Node.js的兴趣,让你在前端开发的道路上越走越远!


七、课程推荐

🚀 提升Node.js技艺,打造高效CLI工具 —— 精选课程推荐!

👩‍💻 想成为Node.js高手,并精通CLI工具开发吗? 无论你是前端开发者、后端工程师,还是对Node.js充满好奇的技术爱好者,这两门课程都将是你技术进阶的不二之选!


🌟 课程一:趣学 Node.js

🔗 立即访问趣学 Node.js

👨‍🏫 课程导师:死月,Node.js Collaborator,字节跳动Node.js Infra团队架构师,著有《Node.js:来一打 C++ 扩展》,并翻译多部技术经典。

📚 课程亮点

  • 深入浅出:用通俗易懂的语言,揭秘Node.js的发展史、运行时机制、核心模块原理。
  • 实战导向:不仅讲解理论,更带你理解代码执行背后的故事,提升实际开发中的“手感”。
  • 宏观微观兼具:从Node.js的宏观架构到微观细节,全方位提升你的技术视野。

🎯 适合人群:想要深入理解Node.js内部机制,提升技术深度的开发者。


🔍 课程二:深入剖析 Node.js 底层原理

🔗 立即访问深入剖析 Node.js 底层原理

👨‍🏫 课程导师:theanarkh,字节跳动Node.js工程师,Node.js Collaborator,拥有丰富的实战经验和源码研究背景。

📚 课程亮点

  • 系统全面:从架构到基础,再到核心模块,一步步构建你的Node.js知识体系。
  • 实战代码:理论结合实践,提供大量可操作的代码示例,让你学以致用。
  • 底层知识:不仅限于Node.js,还涵盖V8、操作系统、网络等底层知识,拓宽你的技术边界。
  • 源码阅读:教你如何独立阅读源码,培养深入探索的能力,为开发高效CLI工具打下坚实基础。

🎯 适合人群:渴望深入理解Node.js底层,提升CLI工具开发能力的开发者。


🔥 为什么选择这两门课程?

  • 权威导师:由Node.js领域的专家亲自授课,确保内容的专业性和前沿性。
  • 实战导向:结合大量实战案例和代码示例,让你在学习中不断实践,快速提升。
  • 系统全面:从基础到进阶,从理论到实践,全方位提升你的Node.js技能和CLI工具开发能力。

🎉 现在行动,立即加入学习大军,让Node.js和CLI工具开发不再遥不可及!


别等了,点击链接,开启你的Node.js和CLI工具开发之旅吧!🚀

本文由mdnice多平台发布


倔强青铜三
21 声望0 粉丝