【问题标题】:Run separate functions in node.js file from terminal从终端在 node.js 文件中运行单独的函数
【发布时间】:2020-08-27 17:12:06
【问题描述】:

我有一个 javascript 文件,我正在其中运行一些节点任务,并且希望能够根据我触发的终端命令单独运行它们。

例如,我的 nodejs 文件 myFile 代码可能如下所示:

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

const getDbData = () => {
    ...
    ...
}

const fileTransform = () => {
    file transformation functionality
}

我希望能够分别运行每个函数,这样我就可以在终端中说node myFile.js getDbData。我是否需要导出每个函数才能执行此操作?

【问题讨论】:

    标签: javascript node.js terminal


    【解决方案1】:

    您可以在node 命令行上为您的脚本提供命令行参数。您在process.argv 数组中收到它们。您的参数从索引 2 开始(0node 的完整路径,1 是脚本的完整路径)。

    例如:

    switch (process.argv[2]) {
        case "getData":
            getData();
            break;
        case "etlData":
            etlData();
            break;
        // ...
    }
    

    请注意,您的参数确实从索引 2 开始,即使在实际命令行中您的脚本之前有一个 Node 参数。例如:

    节点 --use-strict your-script.js

    ...在process.argv[0] 中仍然有到node 的完整路径,在process.argv[1] 中还有你的脚本的完整路径。 --use-strict 参数根本不在数组中。


    或者你可以把你的函数放在一个对象上并使用参数作为键:

    function getData() {
        // ...
    }
    
    function getData() {
        // ...
    }
    
    const functions = {
        getData,
        etlData
    };
    const fn = functions[process.argv[2]] || () => { console.log("Invalid option"); };
    fn();
    

    【讨论】:

    • 在试图理解您的答案时,您是否提出了这样的建议:switch (process.argv[2]) { case 'getData': getData(); break; case 'etlData': etlData(); break; }
    • 是的,类似的。或者您可以使用调度对象,我在答案中添加了一个示例。
    • 感谢您提供更新。但是,|| 之后的函数存在问题,我如何在终端中运行它来分别触发这些函数?
    • node yourscript.js getData and node yourscript.js etlData and (to trigger the catch-all) node yourscript.js anything-else.
    • 我已经用你的建议更新了我的问题,我现在看到了一个错误:TypeError: fn is not a function。知道是什么原因造成的吗?谢谢。
    【解决方案2】:

    尝试使用process.argv

    https://stackabuse.com/command-line-arguments-in-node-js/

    解析命令行参数,例如,使用eval()评估它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      相关资源
      最近更新 更多