monorepo工程开发交互nodejs命令行程序

这篇具有很好参考价值的文章主要介绍了monorepo工程开发交互nodejs命令行程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

[MixedCli](https://zhangfisher.github.io/mixed-cli/)monorepo应用开发命令行程序提供了一套解决方案,提供了更加友好的命令行开发体验。

第1步:创建工程

以一个典型的monorepo为例开始:


flexapp
  packages
     cli     
     core
     vue
     react

示例工程名为flexapp,工程中的包名分别是@flexapp/core@flexapp/cli@flexapp/vue@flexapp/react

第2步:创建命令行应用

@flexapp/cli是命令行应用,对外提供flexapp的命令行工具。

1. 安装依赖

::: code-group

npm install mixed-cli
pnpm add mixed-cli
yarn add mixed-cli

:::

2. 创建cli.js

@flexapp/cli包中创建cli.js文件,内容如下:

flexapp
  pacakges
    cli
      cli.js
      init.js
      package.json

主要内容如下:

::: code-group

const { outputStr,MixedCli } = require("mixed-cli") 
const initCommand = require("./init")

const cli = new MixedCli({
    name: "flexapp",
    version: "1.0.0",
    include: /^\@flexapp\//, 
    // 显示logo
    logo: String.raw`
        ____   ____                  __            
        \   \ /   /___   ___________|  | _______   
         \   Y   /  _ \_/ __ \_  __ \  |/ /\__  \  
          \     (  <_> )  ___/|  | \/    <  / __ \_
           \___/ \____/ \___  >__|  |__|_ \(____  /
                            \/           \/     \/`, 
})
cli.register(initCommand)
cli.run()

{
  "name": "@flexapp/cli",
  "version": "1.0.0",
  "bin": {
    "flexapp": "cli.js"
  }
}

:::

@flexapp/cli仅仅是一个命令行的入口:

  • 重点:include: /^\@flexapp\// 的意思是告诉mixed-cli,当执行flexapp命令时,会在当前工程中搜索以@flexapp/开头的包,然后包中声明在cli文件夹下的所有命令被合并到flexapp命令中。
  • @flexapp/cli中使用cli.register(iniCommand),注册一个通用的init命令,该命令的实现在init.js中。 一般可以在此工程提供一些通用命令,而其他的命令声明逻辑在分别在@flexapp/*/cli/*.js等包中实现。

第3步: 创建命令

从上面可以看到@flexapp/cli非常简单,主要是一些通用的命令和命令行的入口。而真正的命令声明在其他的包中,比如@flexapp/vue@flexapp/react等包中。

然后接下来,我们在@flexapp/vue中创建一个dev命令,用于启用vue项目。

flexapp
  pacakges
    cli
        cli.js
        dev.js
        package.json
    vue
        src
            index.ts
            cli
                dev.js      // dev命令的实现
        pacakge.json

接下来我们编写dev.js文件,内容如下:

::: code-group


const { MixedCommand } = require('mixed-cli');

/**
 * @param {import('mixed-cli').MixedCli} cli
 */
module.exports = (cli)=>{                

    const devCommand = new MixedCommand();
    devCommand
        .name('dev')
        .description("以开发模式启动应用")      // 未指定默认值,自动使用text类型提供                       
        .option("-p,--port <port>","指定端口号",3000)                      
        .option("-d,--debug" ,"调试模式",{ default:true,prompt:true })      
        .option("-h,--host <host>","指定主机名",{default:"localhost",prompt:true})                         
        .option("-e,--env [value]","环境变量",{ prompt:false })                                   
        .option("-m,--mode <mode>","指定模式",{choices:["development","production","test","debug"]})
        .option("-f,--framework [value]","开发框架",{choices:[
            {title:"vue",value:1},
            {title:"react",value:2,description:"默认"},
            {title:"angular",value:3}
        ]})
        .option("-o,--open","自动打开浏览器",{prompt:{          // 自定义提示
            type:"toggle",
            message:"是否自动打开浏览器?",
        }})
        .action((options)=>{            
            console.log("run dev")
        })

    return devCommand
} 
    
   

{
  "name": "@flexapp/vue",
  "version": "1.0.0",
  "main": "index.js",
  "dependencies": {
    "mixed-cli": "^1.0.0"
  }
}

:::

  • src/cli目录下创建dev.js文件,用于声明dev命令。cli目录下的所有js文件会被自动加载,每个文件均导出一个函数,该函数需要返回一个或多个MixedCommand实例。cli目录是一个默认的约定目录,可以通过cli.cliDir参数修改。
  • 创建MixedCommand实例,用于声明命令。MixedCommand继承自commanderCommand类,因此可以使用commander的所有特性。
  • package.json只需要将mixed-cli添加为依赖即可。
  • 同样地,我们可以在@flexapp/react,@flexapp/app等包中创建其他的命令。

第4步: 使用命令

我们在flexapp应用中开发。

  • 安装@flexapp/cli

::: code-group

npm install @flexapp/cli @flexapp/vue
pnpm add @flexapp/cli @flexapp/vue
yarn add @flexapp/cli @flexapp/vue

:::

安装@flexapp/cli包后,就可以在命令行中使用flexappflexapp init命令了。

此时执行一下flexapp命令,会看到如下输出:

____   ____                  __
\   \ /   /___   ___________|  | _______
 \   Y   /  _ \_/ __ \_  __ \  |/ /\__  \
  \     (  <_> )  ___/|  | \/    <  / __ \_
   \___/ \____/ \___  >__|  |__|_ \(____  /
                    \/           \/     \/
版本号:1.0.0 
Usage: flexapp [options] [command]

Options:
  -v, --version      当前版本号
  -h, --help         显示帮助

Commands:
  init [options]    初始化应用  // 只有这个命令 
  • 接下来我们安装@flexapp/vue

::: code-group

npm install @flexapp/vue @flexapp/vue
pnpm add @flexapp/vue @flexapp/vue
yarn add @flexapp/vue @flexapp/vue

:::

此时再执行一下flexapp命令,会看到如下输出:

____   ____                  __
\   \ /   /___   ___________|  | _______
 \   Y   /  _ \_/ __ \_  __ \  |/ /\__  \
  \     (  <_> )  ___/|  | \/    <  / __ \_
   \___/ \____/ \___  >__|  |__|_ \(____  /
                    \/           \/     \/
版本号:1.0.0 
Usage: flexapp [options] [command]

Options:
  -v, --version      当前版本号
  -h, --help         显示帮助

Commands:
  init [options]    初始化应用  
  # dev命令是由@flexapp/vue包提供的
  dev [options]     以开发模式启动应用  //   [!code ++]

第5步: 自动推断交互提示

在上面dev命令中,共指定了6个选项,当执行flexapp dev命令时, 会根据配置自动交互引导用户输入选项,如下:文章来源地址https://www.toymoban.com/news/detail-824239.html

  • 命令行的交互体验与使用commander时完全一样
  • 仅当选项未指定默认值或满足一定条件时,才会根据一定的规则自动推断交互提示类型。详见自动推断交互提示
  • MixedCli使用prompts来实现交互提示,因此支持prompts的所有交互类型特性。详见prompts

小结

  • MixedCli是一个基于commander的命令行工具开发框架,提供了一套命令行开发的最佳实践。
  • MixedCli能对所有命令行选项自动推断交互提示类型,当用户没有输入选项时,会自动引导用户输入选项,提供友好的用户体验。
  • MixedCli可以在当前工程自动搜索满足条件的包下声明的命令进行合并,从而实现扩展命令的目的。此特性可以保持@flexapp/cli包的精简和稳定,给用户一致的体验。

到了这里,关于monorepo工程开发交互nodejs命令行程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Node.Js篇 NodeJs使用MongoDB

    目录 介绍 概念解析                   安装 启动时注意事项 NodeJs操作Mongo 介绍 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。                                                           

    2024年02月09日
    浏览(53)
  • 【nodejs】用Node.js实现简单的壁纸网站爬虫

    在这个博客中,我们将学习如何使用Node.js编写一个简单的爬虫来从壁纸网站获取图片并将其下载到本地。我们将使用Axios和Cheerio库来处理HTTP请求和HTML解析。 首先,确保你已经安装了Node.js环境。然后,我们将创建一个新的文件夹,初始化项目并安装所需的依赖库: 编写爬虫

    2024年02月12日
    浏览(47)
  • uniapp + node.js 开发问卷调查小程序

    前后端效果图 后端:nodejs 12.8 ; mongoDB 4.0 前端:uniapp 开发工具:HBuilderX 3.99 前端首页代码 index.vue 后台管理部分页面代码 charts.vue 后端使用 nodejs + mongoDB 搭建服务 程序入口文件 app.js 对原始数据按题目名称进行分组,然后追加需要用到的字段,再把处理好的数据发给前端进行

    2024年01月18日
    浏览(50)
  • Vue.js+Node.js开发实战就业反馈小程序-培训机构学员

     💖💖更多项目资源,最下方联系 IT实战课堂 ✨✨✨✨✨✨ 博主拥有多年的T技术研发项目架构和教学经验,CSDN/51CTO/腾讯课堂等平台优质作者、高级讲师,培训机构联合创始人!现专注项目定制Java、小程序、前端网页、Python、App、NodeJs、PHP、微服务、NET等远程部署、售后答

    2024年02月20日
    浏览(57)
  • 「NodeJs进阶」超全面的 Node.js 性能优化相关知识梳理

    相信对于前端同学而言,我们去开发一个自己的简单后端程序可以借助很多的nodeJs的框架去进行快速搭建,但是从前端面向后端之后,我们会在很多方面会稍显的有些陌生,比如「性能分析」,「性能测试」,「内存管理」,「内存查看」,「使用C++插件」,「子进程」,「

    2024年02月01日
    浏览(54)
  • 【Node.js从基础到高级运用】十三、NodeJS中间件高级应用

    在现代web开发中,Node.js因其高效和灵活性而备受青睐。其中,中间件的概念是构建高效Node.js应用的关键。在这篇博客文章中,我们将深入探讨Node.js中间件的高级应用,包括创建自定义中间件、使用第三方中间件等。我们将从基础讲起,逐步深入,旨在为读者提供全面而深入

    2024年03月22日
    浏览(100)
  • Nodejs 入门8 NeDB 轻量级的Node.js 数据库

    常用的sqlite轻量级数据库,nodejs在windows环境下安装配置有时候会比较麻烦,很难顺利安装。 Nedb(Node Embedded Database)在一些情况下可以替代sqlite,特别适用于小型项目和快速原型开发。本文将介绍Nedb的基本概念、特性和使用方法,以帮助大家更好地了解和利用这个便捷的工

    2024年01月22日
    浏览(65)
  • 基于Node.js的酒店民宿微信小程序的设计与开发

    摘要 随着移动互联网的普及和人们生活水平的提升,旅游住宿需求日益旺盛。酒店和民宿作为主要的住宿方式,在市场上的竞争也愈发激烈。微信小程序作为一种轻量级、易推广的移动应用形态,为酒店民宿行业提供了全新的服务模式和营销渠道。本文详细阐述了基于Node.

    2024年02月21日
    浏览(51)
  • 使用nodejs和web3js实现链接metamask钱包并实现合约交互

    在以太坊区块链上,metamask钱包是一个非常常用的钱包,用以管理以太币和其他以太坊资产。同时,它也是一个重要的以太坊智能合约交互工具。在本文中,我们将介绍如何使用nodejs和web3js实现链接metamask钱包并实现合约交互。 在开始之前,首先需要安装NodeJS和Web3JS。 NodeJS是

    2024年02月04日
    浏览(90)
  • Node.js 文件写入及文件夹交互操作

    目录 1、文件写入 1.1 同步写入文件 1.2 将内容追加到文件 2、文件夹交互 2.1 检查文件夹是否存在 2.2 创建新文件夹 2.3 读取目录内容 2.4 重命名文件夹 2.5 删除文件夹 在Node.js中写入文件最简单的方法是使用fs.writeFile()API。 您可以使用同步版本fs.writeFileSync(): 您还可以使

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包