node命令行工具之实现项目工程自动初始化的标准流程

yizhihongxing

下面是实现项目工程自动初始化的标准流程:

1. 创建项目

在命令行中创建项目文件夹,并在其内部添加项目 package.json 文件。

mkdir auto-init-project
cd auto-init-project
npm init -y

2. 创建node cli工具

使用以下命令生成一个全局安装的包,该包将成为node命令行工具。

npm i -g

3. 添加脚手架模板

在项目文件夹中创建一个文件夹,并添加项目模板文件。

mkdir templates
touch index.html
touch app.css
touch app.js

4. 构建命令行工具

在项目根目录中创建一个 index.js 文件,并编写以下代码:

#!/usr/bin/env node

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

const copy = promisify(ncp);

async function makeProject() {
  const answer = await inquirer.prompt([
    {
      type: 'input',
      name: 'name',
      message: '项目名称:',
    },
    {
      type: 'input',
      name: 'description',
      message: '项目描述:',
    },
    {
      type: 'input',
      name: 'author',
      message: '作者:',
    },
    {
      type: 'input',
      name: 'template',
      message: '选择模版:',
      default: 'default'
    },
  ]);
  let templateDir = answer.template;
  if (answer.template === 'default') {
    templateDir = path.join(__dirname, 'templates');
  }
  const targetDir = path.join(process.cwd(), answer.name);
  if (fs.existsSync(targetDir)) {
    console.error('目录已经存在: %s', targetDir);
    process.exit(1);
  }

  console.info(`正在使用 ${templateDir} 模版创建 ${answer.name} 目录...`);
  await copy(templateDir, targetDir);

  const packageJson = path.join(targetDir, 'package.json');
  const data = fs.readFileSync(packageJson);
  const packageData = JSON.parse(data);
  packageData.name = answer.name;
  packageData.description = answer.description;
  packageData.author = answer.author;
  fs.writeFileSync(packageJson, JSON.stringify(packageData, null, 2));
  console.info(`[${answer.name}] 目录创建完成!`);
}
makeProject()
  .then(() => {})
  .catch((err) => {
    console.error(err);
    process.exit(1);
  });

上述代码完成了以下操作:

  1. 使用inquirer获取用户的输入。
  2. 创建项目文件夹,并复制脚手架模板文件到项目目录中。
  3. 更新项目package.json文件并以输入的信息替换默认信息。

5. 安装依赖包

需要安装以下依赖包:

  • inquirer:用于命令行交互。
  • ncp:用于文件系统拷贝。

在根目录中创建并编辑package.json文件。

{
  "name": "auto-init",
  "version": "1.0.0",
  "description": "Auto init project",
  "main": "index.js",
  "bin": {
    "create-project": "./index.js"
  },
  "keywords": [],
  "author": "Your Name",
  "license": "MIT",
  "dependencies": {
    "inquirer": "^7.3.3",
    "ncp": "^2.0.0"
  }
}

使用以下命令来安装依赖项。

npm install

6. 测试命令行工具

可以使用以下方式来测试命令行工具是否正常工作。打开终端并运行以下命令。

create-project

此时将会出现一组提示信息,按要求分别输入即可创建初始化工程项目。具体可以参考下方的演示示例。

示例一:

$ create-project
项目名称: blog
项目描述: my blog
作者: alucard
选择模版: default
正在使用 /Users/alucard/node/app/projects/auto-init/templates 模版创建 blog 目录...
[blog] 目录创建完成!

示例二:

$ create-project
项目名称: shop-admin
项目描述: shop management system
作者: alucard
选择模版: default
正在使用 /Users/alucard/node/app/projects/auto-init/templates 模版创建 shop-admin 目录...
[shop-admin] 目录创建完成!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node命令行工具之实现项目工程自动初始化的标准流程 - Python技术站

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

相关文章

  • Node.js 中常用内置模块(path 路径模块)

    Node.js 中常用内置模块之一是 path 路径模块,它可以帮助我们轻松地操作和处理文件路径。在本文中,我们将深入探讨它的各种方法和用法。 安装和引用 path 模块是 Node.js 内置的,您不需要任何额外的安装步骤。您只需要使用 require() 函数将它引入您的脚本中即可: const path = require(‘path’); 属性 pa…

    node js 2023年6月8日
    00
  • node使用async_hooks模块进行请求追踪

    当我们的应用程序处理多个异步请求时,我们常常会希望跟踪这些请求。这里给出了使用Node.js中的async_hooks模块进行请求追踪的完整攻略。 async_hooks模块介绍 async_hooks模块是Node.js v8.2.0引入的新模块。它提供了API来在异步操作的生命周期中跟踪它们的状态,从而能够进行调试和分析。 该模块是一个实验性质的功能,可…

    node js 2023年6月8日
    00
  • Node.js学习教程之Module模块

    Module是Node.js中非常重要的一个概念,它不仅充实了Node.js的功能,还简化了Node.js中的代码实现。本篇教程将详细介绍Node.js Module的定义、使用方法以及相关的注意点。 什么是Module? Module是一个可以被其他模块导入和使用的Node.js文件或文件夹。在Node.js中,任何一个.js文件都可以看作是一个Modul…

    node js 2023年6月8日
    00
  • 原生JS发送异步数据请求

    下面是原生JS发送异步数据请求的完整攻略: 1. 创建XMLHttpRequest对象 XMLHttpRequest对象是用于向服务器发送请求和获取服务器响应的JavaScript API。我们需要先创建一个XMLHttpRequest对象来处理异步请求。 let xhr = new XMLHttpRequest(); 2. 设置请求参数 向服务器发送请求需…

    node js 2023年6月8日
    00
  • 面向JavaScript入门初学者的二叉搜索树算法教程

    下面是“面向JavaScript入门初学者的二叉搜索树算法教程”的完整攻略: 什么是二叉搜索树 二叉搜索树(Binary Search Tree,简称BST)是一种基于二分查找的数据结构,它满足下列性质: 左子树上所有结点的值均小于它的根结点的值; 右子树上所有结点的值均大于它的根结点的值; 左右子树也分别为BST; 没有重复的结点。 二叉搜索树的插入操作 …

    node js 2023年6月8日
    00
  • 一文详解Node.contain 函数兼容处理

    一文详解Node.contains函数兼容处理 介绍 Node.contains函数是DOM API中比较常用的一个函数,用来判断一个DOM元素是否包含另一个DOM元素。但是在不同的浏览器环境下,该函数的返回值不完全一致,因此需要进行兼容处理。本文将详细介绍Node.contains函数的用法以及兼容处理的方法。 Node.contains函数用法 Node…

    node js 2023年6月8日
    00
  • nodejs之base64编码解码问题

    下面是nodejs之Base64编码解码问题的完整攻略: 什么是Base64编码解码? Base64是一种二进制数据到文本数据的编码方式,可以把二进制数据编码成只包含64个可打印字符的文本形式,解码时再把文本数据变回二进制数据。Base64编码和解码是用在很多的网络传输中,例如通过URL传输数据,或者发送邮件等。 Base64编码是通过将3个8位字节转换为4…

    node js 2023年6月8日
    00
  • 使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目

    关于“使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目”的完整攻略,我们可以分为以下几个部分来进行讲解。 I. 环境准备 首先,需要安装Node.js,并且建议安装最新版本。在安装完成之后,我们可以打开终端(Command Prompt或者Terminal),输入以下命令: npm install -g grunt-cli 这个命令…

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