返回

探索从入门到精通的脚手架 CLI 开发指南(二)

前端

在上一篇文章中,我们已经介绍了脚手架 CLI 的基本概念以及如何创建一个简单的脚手架项目。在这篇文章中,我们将继续深入探究脚手架 CLI 的开发,包括如何添加命令、参数和选项,如何处理用户输入,以及如何发布您的脚手架到 NPM。

添加命令

脚手架 CLI 的一个重要功能是能够运行命令。命令允许用户与脚手架交互,并执行各种任务。例如,您可以创建一个命令来生成一个新的项目,或者创建一个命令来运行测试。

要添加一个命令,您需要在 package.json 文件中添加一个 bin 字段。bin 字段指定了脚手架 CLI 的主命令。例如,如果您想创建一个名为 create-app 的命令,则可以在 package.json 文件中添加以下代码:

{
  "name": "create-app",
  "version": "1.0.0",
  "bin": {
    "create-app": "./bin/create-app.js"
  }
}

接下来,您需要创建一个名为 create-app.js 的文件,并将其放在 bin 目录下。这个文件将包含您命令的代码。例如,以下代码创建一个名为 create-app 的命令,该命令将创建一个新的项目:

#!/usr/bin/env node

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

const projectName = process.argv[2];

if (!projectName) {
  console.error('Please specify a project name.');
  process.exit(1);
}

const projectPath = path.join(process.cwd(), projectName);

fs.mkdirSync(projectPath);

const packageJson = {
  name: projectName,
  version: '1.0.0',
  main: 'index.js',
  scripts: {
    start: 'node index.js'
  }
};

fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));

console.log(`Project ${projectName} created successfully.`);

添加参数和选项

命令可以具有参数和选项。参数是命令所必需的输入,而选项是可选的输入。例如,您可以创建一个名为 create-app 的命令,该命令需要一个参数来指定项目名称,并具有一个选项来指定项目的位置。

要添加一个参数,您需要在 create-app.js 文件中使用 process.argv 数组。process.argv 数组包含命令行中输入的所有参数。例如,以下代码创建一个名为 create-app 的命令,该命令需要一个参数来指定项目名称:

#!/usr/bin/env node

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

const projectName = process.argv[2];

if (!projectName) {
  console.error('Please specify a project name.');
  process.exit(1);
}

const projectPath = path.join(process.cwd(), projectName);

fs.mkdirSync(projectPath);

const packageJson = {
  name: projectName,
  version: '1.0.0',
  main: 'index.js',
  scripts: {
    start: 'node index.js'
  }
};

fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));

console.log(`Project ${projectName} created successfully.`);

要添加一个选项,您需要在 create-app.js 文件中使用 yargs 库。yargs 库是一个命令行参数解析库。例如,以下代码创建一个名为 create-app 的命令,该命令需要一个参数来指定项目名称,并具有一个选项来指定项目的位置:

#!/usr/bin/env node

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

const argv = yargs
  .option('location', {
    alias: 'l',
    description: 'The location of the project.',
    type: 'string'
  })
  .help()
  .alias('help', 'h')
  .argv;

const projectName = argv._[0];

if (!projectName) {
  console.error('Please specify a project name.');
  process.exit(1);
}

const projectPath = argv.location ? path.join(argv.location, projectName) : path.join(process.cwd(), projectName);

fs.mkdirSync(projectPath);

const packageJson = {
  name: projectName,
  version: '1.0.0',
  main: 'index.js',
  scripts: {
    start: 'node index.js'
  }
};

fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));

console.log(`Project ${projectName} created successfully.`);

处理用户输入

脚手架 CLI 可以通过 process.stdin 流来处理用户输入。process.stdin 流是一个可读流,它允许您读取用户输入的数据。例如,以下代码创建一个名为 create-app 的命令,该命令将提示用户输入项目名称:

#!/usr/bin/env node

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

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('What is the name of your project? ', (projectName) => {
  rl.close();

  const projectPath = path.join(process.cwd(), projectName);

  fs.mkdirSync(projectPath);

  const packageJson = {
    name: projectName,
    version: '1.0.0',
    main: 'index.js',
    scripts: {
      start: 'node index.js'
    }
  };

  fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(packageJson, null, 2));

  console.log(`Project ${projectName} created successfully.`);
});

发布脚手架

当您开发好您的脚手架 CLI 后,您就可以将其发布到 NPM 了。要发布您的脚手架 CLI,您需要先创建一个 NPM 账户。然后,您需要运行以下命令:

npm publish

这将把您的脚手架 CLI 发布到 NPM。其他人就可以通过以下命令安装您的脚手架 CLI:

npm install -g your-scaffold-cli

总结

在本文中,我们介绍了如何添加命令、参数和选项,如何处理用户输入,以及如何发布您的脚手架到 NPM。现在,您已经掌握了创建和发布自定义脚手架 CLI 的技能。您可以使用这些技能来构建各种各样的工具和应用程序。