美文网首页
Nodejs 技术栈下自研 Fire(初-粗版)

Nodejs 技术栈下自研 Fire(初-粗版)

作者: 狄仁杰666 | 来源:发表于2023-12-27 15:54 被阅读0次

前言

来啦老铁!

早先时候,我们在文章 Node.js 命令行工具库:js-fire 中一起学习了在 nodejs 技术栈下如何使用 js-fire 库,自动生成命令行接口,不过近期有遇到问题:

  • js-fire 不能像 Python 下的 Fire 模块链式使用多个方法,例如:
node .\test.js - add 2 3 - double

这种就不支持,作者的 README、代码和网上也都没有相关的办法,因此我萌生出一个想法:

  • 在 Nodejs 技术栈下自研 fire 功能;

学习路径

  1. 编写自研 fire 代码;
  2. 编写演示代码;
  3. 自研 fire 演示;
  4. 说明;

2. 编写自研 fire 代码;

代码如下:
// 格式化入参,数字时使用数字而非纯文本,非数字使用纯文本格式
function formatParameter(parameter) {
    if (!parameter) {
        return;
    }
    return isNaN(parameter) ? `'${parameter}'` : parseFloat(parameter);
}

module.exports = async (
    // input 这里指输入对象,即要 fire 的方法集对象
    input,
    // 获取控制台输入
    args = process.argv.slice(2),
) => {
    let executors = [];
    let params = [];
    args.reduce((accumulator, currentValue, index) => {
        // 根据命令行输入中的标识符 -,来决定方法名是哪个一个,这里使用 - 后面的第一个文本作为方法名
        // 使用两个 - 中间除去方法名的其他文本作为方法入参
        if (currentValue === '-') {
            const executorName = args[index + 1];
            params = [];
            executors.push({
                [executorName]: params
            });
            return accumulator;
        }
        // 如果当前是方法名,则不收集作为入参,否则进入下一步,搜集入参
        if (executors.find(jsonObject => currentValue in jsonObject) != undefined) {
            return accumulator;
        }
        // 收集两个 - 中间除去方法名的其他文本,以作为方法入参
        params.push(currentValue);
        accumulator.push(currentValue);
        return accumulator;
    }, []);

    console.log(input.description);
    for (const executor of executors) {
        const executorName = Object.keys(executor)[0];
        // 拼装要执行的方法
        let params = [];
        let execText = "input[executorName](";
        executor[executorName].map((param) => {
            params.push(formatParameter(param));
            execText += `${formatParameter(param)},`;
        });
        execText += ")";
        // 使用 await 支持同步方法
        const result = await eval(execText);
        console.log(result);
    }
};

1. 编写演示代码;

演示代码如下:
const config = require("./config");

const fire = require("./util/fire");

class demo {
    constructor() {
        this.description = "自研 Fire 工具演示";
        this.config = config;
    }

    add(number1, number2) {
        this.result = number1 + number2;
        return this.result;
    }

    double() {
        this.result = this.result * 2;
        return this.result;
    }

    printResult() {
        console.log("计算结果:", this.result);
        return "";
    }

    joinText(str1, str2) {
        this.str = str1 + "," + str2;
        return this.str;
    }

    printConfigItem() {
        console.log(this.config.name);
        // 用这个也行 console.log(config.name);
        return "";
    }
}

fire(new demo());

3. 自研 fire 演示;

  1. 单方法调用;
node .\test.js - add 2 3
演示-单方法调用
node .\test.js - joinText 1ab23 cd5f
非数学计算情况
  1. 多方法链式调用;
node .\test.js - add 2 3 - double - printResult
演示-多方法链式调用
  1. 演示文件中调用其他文件;
    例如,我的演示方法 printConfigItem 中,去读取其他文件中的配置信息 config.name;
node .\test.js - printConfigItem
调用其他文件

说明;

  1. 我这个 fire 工具只是快速实现版本,没有考虑太多,目前使用固定命令行格式调用,例如:
node .\test.js - add 2 3 - double - printResult

后续会根据实际情况优化~

  1. 对代码没有严格的测试,有问题后续会修复更新,也欢迎读者帮忙指出,感谢~
  2. 对代码效率、风格等没有做严格的检查,如有不合适的地方,欢迎读者帮忙指出,感谢~

好了,今天就到这里了,继续搬砖了~

能力有限,欢迎指正、互相交流,感谢~

如果本文对您有帮助,麻烦点赞、关注!

感谢~

相关文章

  • nodejs技术栈

    superagent superagent是一个http方面的库,用于发起请求 基本用法request .pos...

  • Nodejs + Socket.io + Nginx 搭建聊天

    Nodejs + Socket.io + Nginx 搭建聊天 一、技术栈 服务端Nodejs (express框...

  • QQ-music

    技术栈 ES6 + Webpack + Sass + Nodejs + Express + Babel + Cor...

  • 仿 VIP

    技术栈 Vue、Vue Router、NodeJS、MongoDB、memory-cache、js-cookie、...

  • Nodejs技术栈梳理

    Nodejs语言 基础知识 fs net http crypto process util 框架和库 expres...

  • 麦壳前端技术分享

    麦壳前端技术分享 标签(空格分隔): 技术分享 ng+bs+插件 简介 技术栈:nodeJS4+ + Angula...

  • React技术栈

    React技术栈 1、nodejs安装更新 ubuntu16 nodejs最新版本安装: 1.1. 更换淘宝的镜像...

  • ReactNative 项目--仿Reddit

    源码地址请戳 github 基本技术栈:   后端:nodejs  数据库:mongodb  缓存:redis  ...

  • 邻舍民宿

    服务器端 1. 技术栈: 语言: NodeJs框架: Express4.x版本链接数据库的NodeJs库: Mon...

  • Vue3_Project更新中

    Vue-Cli3 + Node Project 项目展示以及技术栈 NodeJS构建后端接口 VueCli3....

网友评论

      本文标题:Nodejs 技术栈下自研 Fire(初-粗版)

      本文链接:https://www.haomeiwen.com/subject/qnmrndtx.html