使用nodejs开发cli项目实例

下面是使用nodejs开发cli项目的完整攻略:

什么是CLI项目?

CLI(Command Line Interface)是指通过命令行界面与程序交互的方式。CLI项目是为命令行界面设计的应用程序。使用CLI项目可以在终端中执行特定的命令,实现特定的功能,比如,创建文件、删除文件、安装软件等。

开始构建CLI项目

  1. 创建项目文件夹

在终端中选择一个合适的位置,使用以下命令创建项目文件夹:

mkdir myCLI
  1. 初始化项目

在项目文件夹中执行以下命令初始化一个npm项目:

npm init -y
  1. 安装依赖

在终端中执行以下命令安装所需的依赖:

npm install commander inquirer chalk --save

上面这条命令用来安装使用CLI必备的三个npm模块:commander、inquirer和chalk。

  1. 创建代码文件

在项目文件夹内创建一个index.js文件。该文件将包含整个项目的代码。

  1. 编写CLI程序

编写CLI程序的过程可以看成是两个部分:定义命令和编写命令处理函数。

定义命令

在项目的index.js文件中编写以下代码,以定义CLI程序要支持的命令:

const { program } = require('commander');
program.version('0.1.0');

program
  .command('create <name>')
  .description('create a new project')
  .option('-s, --style <style>', 'add style language support')
  .option('-f, --force', 'overwrite existing files')
  .action((name, options) => {
    console.log('run create command', name, options);
  });

program.parse(process.argv);

上面这段代码定义了一个create命令,用于创建新的项目。该命令包含两个选项:-s和-f,在创建项目时可以使用这两个选项来指定一些参数。该命令使用console.log()函数来输出命令执行时的一些信息。

编写命令处理函数

在上面的代码中,以.action()方法指定了一个回调函数,在命令执行时将被调用。下面是一个示例回调函数:

const fs = require('fs');
const { promisify } = require('util');
const chalk = require('chalk');
const inquirer = require('inquirer');

const writeFile = promisify(fs.writeFile);

async function createApp(name, options) {
  // 检查是否指定了文件夹名字
  if (!name) {
    console.log(chalk.red('Please specify the project name'));
    return;
  }
  // 检查文件夹是否已存在
  const exists = fs.existsSync(name);
  if (exists && options.force) {
    console.log(chalk.yellow('Project exists, but overwriting existing files'));
    await createFiles(name); // 在已存在的文件夹中创建项目文件
    console.log(chalk.green('Project created successfully!'));
  } else if (exists) {
    console.log(chalk.red('Project already exists, please use another name or use the --force option to overwrite existing files!'));
  } else {
    await createFiles(name); // 创建一个新的文件夹和项目文件
    console.log(chalk.green('Project created successfully!'));
  }
}

async function createFiles(name) {
  // 创建新的文件夹
  fs.mkdirSync(name);

  // 创建package.json文件
  const pkg = {
    name,
    description: name,
    version: '1.0.0',
    scripts: {
      start: 'node index.js'
    },
    dependencies: {},
    devDependencies: {}
  };
  await writeFile(`${name}/package.json`, JSON.stringify(pkg, null, 2));

  // 创建index.js文件
  await writeFile(`${name}/index.js`, `console.log("Hello, ${name}!");\n`);
  console.log(chalk.green('Project files created successfully!'));
}

上面这段代码中,createApp()函数是实现“创建项目”逻辑的核心代码。在该函数中,主要做三件事:

  • 检查是否指定了文件夹名字;
  • 检查文件夹是否已存在,如果已存在,根据选项来覆盖原来的文件夹或者提示错误信息;
  • 在文件夹中创建项目文件。

createFiles()函数是具体用来创建项目文件的代码。

测试CLI程序

在完成编写CLI程序的过程以后,我们需要在终端中测试该程序。在终端中执行以下命令安装该程序:

npm install -g .

其中的“.”意味着将当前目录下的文件安装为全局模块。

安装好后,我们在终端中执行以下命令:

myCLI create myproject

执行该命令后,我们可以在当前目录下看到myproject文件夹被创建。如果多次执行同样的命令,可以看到不同的输出结果。

示例说明

下面我们通过两个实际例子说明如何使用nodejs开发CLI项目:

1. 创建文本文件

本例子中,我们将开发一个CLI程序用来在终端中创建文本文件。该程序需要接受文件名参数和文本内容参数,以便在特定位置创建一个文本文件,并把特定内容写入到该文件中。

首先初始化一个npm项目并安装需要的依赖:

npm init -y
npm install commander --save

然后,我们在项目根目录下创建一个index.js文件。在该文件中,我们定义了create命令,用于创建文本文件。该命令接收两个参数:文件名和文件内容,文件名是必需的,文件内容是可选的。如果不提供文件内容,则会创建一个空文件。

const fs = require('fs');
const { program } = require('commander');

program
  .command('create <filename> [content]')
  .description('create a new text file')
  .action((filename, content) => {
    console.log(`creating file "${filename}" with content "${content}"`);
    fs.writeFile(filename, content, function (err) {
      if (err) throw err;
      console.log('file saved!');
    });
  });

program.parse(process.argv);

当运行该程序时,我们需要在终端中输入以下命令:

node index.js create myFile.txt "Hello, world!"

这条命令将在当前目录下创建一个名为myFile.txt的文本文件,并将“Hello, world!”这个字符串写入到文件中。另外,如果只想创建一个空文件,则可以省略第二个参数。此时终端中的命令将变成:

node index.js create myFile.txt

2. 下载图片

本例子中,我们将开发一个CLI程序用来从图片URL中下载图片。我们将使用request和fs-extra两个扩展模块来实现该程序。

首先初始化一个npm项目并安装所需的依赖:

npm init -y
npm install commander request fs-extra --save

然后在项目根目录下创建一个index.js文件,该文件中我们定义了download命令。该命令接收一个参数:图片URL。在下载图片之前,先判断指定的文件夹是否存在,如果不存在则创建该文件夹。然后将图片下载并保存到该文件夹中。图片的名字将自动根据URL构建。

const fs = require('fs-extra');
const request = require('request');
const { program } = require('commander');

program
  .command('download <url>')
  .description('download an image')
  .action(async url => {
    const path = './images/';
    if (!fs.existsSync(path)) {
      fs.mkdirSync(path);
    }
    const imageName = url.split('/').pop();
    const dest = path + imageName;
    request(url)
      .pipe(fs.createWriteStream(dest))
      .on('close', () => {
        console.log('Image downloaded successfully!');
      })
      .on('error', err => {
        console.log(err.message);
      });
  });

program.parse(process.argv);

当运行该程序时,我们需要在终端中输入以下命令:

node index.js download https://www.example.com/image.jpg

这条命令将从https://www.example.com/image.jpg下载图片,并将其保存到./images/文件夹中。如果该文件夹不存在,则会先创建该文件夹。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用nodejs开发cli项目实例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js-fs文件系统模块这是你知道吗

    Node.js提供了fs模块,用于进行文件系统操作。该模块提供了许多与文件和文件夹相关的功能,例如读取文件、写入文件、创建文件夹、删除文件夹等等。 读取文件 要读取文件,可以使用fs.readFile方法。该方法接受两个参数:文件路径和回调函数。回调函数将返回一个错误(如果有的话)和一个带有文件内容的数据缓冲区。 以下是一个读取文件并在控制台上输出其内容的示…

    node js 2023年6月8日
    00
  • 进阶之初探nodeJS

    进阶之初探Node.js 什么是Node.js Node.js是一种基于Chrome V8 JavaScript引擎的JavaScript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。Node.js的包管理器npm,是全球最大的开源库生态圈。 Node.js的安装 在官网https://nodejs.org/上下载对应版本…

    node js 2023年6月7日
    00
  • 浅谈Vue3中key的作用和工作原理

    下面就是“浅谈Vue3中key的作用和工作原理”的完整攻略。 什么是key? Vue中的key是v-for指令中的一个特殊属性。当Vue更新组件列表时,Vue会将列表中的每个节点与其之前的节点进行对比,并通过一种算法来尽量少地更改DOM树。通过使用key属性,同时考虑节点的顺序、类型和内容,Vue可以更好地确定哪些节点需要被更新,删除或添加。 key的作用 …

    node js 2023年6月8日
    00
  • 基于node.js制作简单爬虫教程

    关于“基于node.js制作简单爬虫教程”的完整攻略,我可以提供如下的步骤和示例。 步骤 安装Node.js:在官网上下载对应的安装包,安装完成。 创建项目:在命令行中使用mkdir创建一个项目目录,使用cd进入该目录,使用npm init创建package.json文件。 安装依赖:使用npm install request cheerio安装reques…

    node js 2023年6月8日
    00
  • JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例

    为了清晰地演示实现身份证格式验证、输出出生日期、性别、年龄和出生地的功能,我将提供以下步骤: 步骤一:获取用户输入的身份证号码 首先,我们需要通过HTML页面的HTML元素(例如用户输入框)来获取用户输入的身份证号码。我们可以使用类似以下的代码来完成这个步骤: <input type="text" id="idCard&q…

    node js 2023年6月8日
    00
  • nodejs的错误处理过程记录

    Node.js的错误处理过程记录 Node.js是一个基于事件驱动和异步I/O模型的JavaScript运行环境。正因为它的异步特性,错误处理也变得非常关键。Node.js提供了多种方式来处理错误,从而帮助开发者更好地协调应用的运行状态。本文将介绍Node.js的错误处理过程记录,并提供两个实例示范它的用法。 错误处理过程记录 Node.js中的错误处理和日…

    node js 2023年6月8日
    00
  • nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例

    想要利用Node.js的HTTP模块实现银行卡所属银行查询和骚扰电话验证,需要先了解一些相关知识点。 HTTP模块简介 HTTP是一种网络协议,用于在Web上传递文件和数据。Node.js提供了内置的HTTP模块,方便开发者创建HTTP服务器和客户端,也允许开发者发送HTTP请求和接收HTTP响应。在这个示例中,我们将使用HTTP模块来发送请求,获取银行卡所…

    node js 2023年6月8日
    00
  • Node.js实现爬取网站图片的示例代码

    下面是详细讲解Node.js实现爬取网站图片的示例代码的完整攻略。 什么是爬虫? 爬取网站图片是一种Web爬虫的应用,那么什么是爬虫呢?简单来说,爬虫就是通过模拟浏览器的方式去访问网站,并收集网站的数据。在收集数据的过程中,我们可以定位到需要的数据,去提取其中的有效信息。爬虫的应用非常广泛,可以用于数据挖掘、舆情分析、搜索引擎等多个领域。 推荐使用的第三方库…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部