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

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

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日

相关文章

  • JS在IE下缺少标识符的错误

    JS在IE下缺少标识符错误通常是由于代码中缺少分号导致的。这个错误在其他浏览器中可能不会出现,但在IE浏览器中会非常常见。下面是了解该错误以及如何解决该错误的完整攻略: 1.了解“JS在IE下缺少标识符的错误”是什么 当在IE浏览器中使用某些JavaScript代码时,可能会看到以下错误消息:缺少标识符。这是因为IE在JavaScript代码中有一个分号缺失…

    node js 2023年6月8日
    00
  • js中的正则表达式入门(大量实例代码)

    接下来我会详细讲解“js中的正则表达式入门(大量实例代码)”的攻略。 什么是正则表达式? 正则表达式是一种用于匹配字符串的模式,是一种强大而灵活的工具。它们由普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)组成。举个例子,用正则表达式来匹配邮箱中的@符号: /@/ 这个正则表达式表示匹配字符串中的@符号。 正则表达式语法 正则表达式语法十…

    node js 2023年6月8日
    00
  • Nodejs进阶之服务端字符编解码和乱码处理

    Nodejs进阶之服务端字符编解码和乱码处理 字符编解码 在服务端处理字符编解码时,需要注意以下几个方面: 请求头中的字符编码 浏览器发送请求时,会将当前页面的字符编码信息放在请求头中,服务端在解析请求时需注意此处的字符编码信息。 示例代码: const http = require(‘http’); const server = http.createSe…

    node js 2023年6月8日
    00
  • nodeJs内存泄漏问题详解

    节点JS内存泄漏问题详解 什么是内存泄漏? 内存泄漏指的是内存中已经被分配的空间,因为某些原因不能被回收或者释放,导致系统中的可用内存越来越少,最终进程可能会耗尽所有可用的内存而崩溃。 节点JS中的内存泄漏 在节点JS中,内存泄漏通常是由于以下几个原因所致: 全局变量:全局变量不再使用时,仍然在内存中存在,可以使用delete操作符进行删除。 计时器:在创建…

    node js 2023年6月8日
    00
  • Nodejs核心模块之net和http的使用详解

    一、Nodejs核心模块之net的使用详解 1. net模块的概述 net模块是Node.js中用于直接处理TCP(传输控制协议)和IPC(进程间通信)的抽象层,提供了稳定的异步网络编程接口,可以快速构建各种网络应用。 2. net模块的常用方法 net模块提供诸如 net.createServer()、net.connect()、 net.Socket 和…

    node js 2023年6月8日
    00
  • 无编译/无服务器实现浏览器的CommonJS模块化

    实现浏览器的CommonJS模块化可以采用Browserify、webpack等工具进行打包编译。但是近年来出现了一些无编译、无服务器的方案,如使用ES modules、SystemJS、RequireJS、Browserify、Babel或使用CDN等。下面将详细介绍如何使用SystemJS实现浏览器的CommonJS模块化。 简介 SystemJS是一个…

    node js 2023年6月9日
    00
  • 从reflect metadata理解Nest实现原理

    从 reflect metadata理解Nest实现原理 Nest是一个基于Express(Express是Node.js的Web框架)的Node.js服务器框架。它使用了它自己的模块化系统,能让你轻松地在Node.js上搭建可伸缩的服务端应用。在实现过程中,Nest使用了reflect-metadata模块,来实现一些核心的功能,下面是详细的讲解: 什么是…

    node js 2023年6月8日
    00
  • 利用NodeJS和PhantomJS抓取网站页面信息以及网站截图

    要利用 NodeJS 和 PhantomJS 抓取网站页面信息以及截图,需要经过以下步骤: 安装 NodeJS 和 PhantomJS 首先需要在本地电脑安装 NodeJS 和 PhantomJS。NodeJS 安装可以前往官网下载对应版本,PhantomJS 安装可以通过以下命令下载到本地: brew install phantomjs # 或者 npm …

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