[js]windows下通过命令行运行javascript脚本,支持命令行参数

windows下通过命令行运行javascript脚本,支持命令行参数

js作为最受欢迎的语言,以其方便、通用、功能强大的特点,可以给大家在实际使用的过程中带来很大的便利。

下面是本文从实际应用的角度理解的js好处:

  1. js的正则表达式处理
  2. 易理解、弱类型的语法特性
  3. 使用浏览器就可以方便调试
  4. 与网页深度结合,在处理和展示有巨大优势

支持命令行运行js脚本,在实际中能起到很多意想不到的效果。下面介绍通过命令行运行javascript脚本的内容。

原理

通过nodejs运行js脚本。

核心函数

为了保证文件用其他方式也能使用,可以先判断是否是通过nodejs运行。如果不是,直接跳过。


function node_main(){
  // 如果不是通过node执行,直接返回
  if("undefined" == typeof process){
    return;
  }

  var s = convert(exampleIn, 'fname');
  console.log(s);
}

node_main()

运行js脚本

请添加图片描述

你现在已经可以用js写你的功能,然后在命令行下执行了。

读写文件

处理文本,不支持读写文件,那是不完整的。

nodejs运行javascript可以通过require('fs')库进行文件的读写。fs库是nodejs自带的系统库,不需要另外安装。

读取文件


var fs = require('fs');
if(!fs.existsSync(tmpFname)){
    return "";
}

var str = fs.readFileSync(tmpFname, null);
return str.toString();

写入文件


var fs = require('fs');
var s = "content to write";
fs.writeFileSync(tmpFname, s);

读取命令行参数

通过变量process.argv读取。第0个是node,第1个是脚本名,第2个开始是要使用的参数


for(var i=2;i<process.argv.length;i++){
    var fname = process.argv[i];
    console.log('arg: ' + fname);
}

完整的示例代码

ProtoIndex.js

/**
 * Proto自动生成编号
 **/

var name = "ProtoIndex";
var des = "Proto自动生成编号";
var exampleIn = ""
+ "message msg {\n"
+ "    repeated string result = 1;\n"
+ "    repeated string a = 1;\n"
+ "\n"
+ "    // 这里是注释\n"
+ "    string b = 1;\n"
+ "    \n"
+ "    // repeated string d = 1; // 注释里的注释\n"
+ "\n"
+ "    repeated uint32 c = 1;\n"
+ "}\n";


function convert(input) {
    var res =indexProto(input);
    return res;
}



/***********************************************************
 * proto定义自动编号
 */
function testProtoIndex(s) {
    return /^[\s]*\w+(\s+[\w.]+)*\s*=\s*([\d]+)/.test(s);
}

function testProtoMessageStart(s) {
    return /^\s*message\s*/.test(s);
}


function replaceProtoIndex(s, index) {
    return s.replace(/\s*=\s*([\d]+)/, function (str, key) {
        return " = " + index;
    });
}

function indexProto(content) {
    var resContent = "";
    var s = content;

    var count = 1;
    var sList;
    if (Array.isArray(content)) {
        sList = content;
    } else {
        sList = s.split("\n");
    }
    var rItems = [];
    for (var i = 0; i < sList.length; i++) {
        var kw = sList[i];
        if (!kw) {
            rItems.push("");
            continue;
        }
        if (testProtoIndex(kw)) {
            kw = replaceProtoIndex(kw, count);
            count++;
        } else if (testProtoMessageStart(kw)) {
            count = 1;
        }
        rItems.push(kw);
    }

    resContent = rItems.join("\n")
    return resContent;
}




/*
 * 公共函数
 */


// 复制对象
function extend(to, from) {
    var keys = Object.keys(from);
    var i = keys.length;
    while (i--) {
        to[keys[i]] = from[keys[i]];
    }
    return to;
}


function nano(template, data) {
    return template.replace(/\{\{([\w\.]*)\}\}/g, function (str, key) {
        var keys = key.split("."),
            v = data[keys.shift()];
        for (var i = 0, l = keys.length; i < l; i++) v = v[keys[i]];
        return (typeof v !== "undefined" && v !== null) ? v : "";
    });
}


node_main();

function node_main(){
  // 如果不是通过node执行,直接返回
  if("undefined" == typeof process){
    return;
  }

  if(process.argv.length <= 2){
    var s = convert(exampleIn, 'no-file-name');
    console.log(s);
    return;
  }

  for(var i=2;i<process.argv.length;i++){
    var tmpFname = process.argv[i];
    console.log(tmpFname);

    var fs = require('fs');
    if(!fs.existsSync(tmpFname)){
        console.log("file not exists");
        continue;
    }

    var str = fs.readFileSync(tmpFname, null);
    var s = convert(str.toString());
    console.log(s);
  }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将一个Node脚本配置成命令行工具,你可以按照以下步骤操作: 1. 在你的项目根目录中创建一个新的文件夹,例如 `bin`,用于存放命令行工具的代码。 2. 在 `bin` 文件夹中创建一个新的文件,例如 `cli.js`,作为你的命令行工具的入口文件。 3. 在 `cli.js` 文件的开头添加 `#!/usr/bin/env node`,这是告诉操作系统使用Node来执行脚本的指令。 例如: ```javascript #!/usr/bin/env node // 命令行工具的代码 ``` 4. 在 `cli.js` 文件中编写你的命令行工具的代码。你可以使用`process.argv`来获取命令行参数,以及使用Node的模块和功能来完成你的逻辑。 例如: ```javascript #!/usr/bin/env node const args = process.argv.slice(2); // 你的命令行工具的逻辑 console.log('Hello, World!'); console.log('命令行参数:', args); ``` 5. 在 `package.json` 文件中的 `scripts` 字段中添加一个自定义的脚本命令,例如 `cli`,并指向你的入口文件。 例如: ```json { "name": "your-project", "version": "1.0.0", "scripts": { "cli": "node bin/cli.js" } } ``` 6. 最后,在命令行运行 `npm link`,这将会在全局范围内创建一个符号链接,使你的命令行工具可以在任何地方使用。 例如: ``` npm link ``` 现在,你就可以在命令行运行你的命令行工具了,使用以下命令: ``` your-project-cli [命令行参数] ``` 注意替换 `your-project-cli` 为你自己的命令行工具的名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遗落尘污

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值