有一个NodeJS CLI的启动脚本

Have a startup script to NodeJS CLI

本文关键字:启动 脚本 CLI NodeJS 有一个      更新时间:2023-09-26

如何将启动脚本添加到node.js cli?例如,对于require ing模块或设置一些选项?

编辑:我说的是服务器端,即我希望能够在系统的任何部分启动node CLI,并让它在全局级别上预加载启动脚本(类似于bashrc)。

当我读到你的帖子时,我意识到当前的Node.js REPL很糟糕!所以我做了一个关于你帖子功能的基本演示,我称之为拨浪鼓。

在这里,我将解释代码的每一行:

#!/usr/bin/env node

这是shebang,它确保它作为节点运行

const repl    = require("repl"),
      vm      = require("vm"),
      fs      = require("fs"),
      path    = require("path"),
      spawn   = require("child_process").spawn,
      package = require("./package");

导入所有包,你知道钻

function insertFile(file, context) {
  fs.readFile(file, function(err, contents) {
    if (err)
      throw err;
    vm.runInContext(contents, context);
  });
}

我定义了将文件插入VM上下文(REPL就是)的函数

if (process.argv.includes("--global")) {
  console.log(path.resolve(__dirname, ".noderc"));

显示全局.noderc 的位置

/** Hijack the REPL, if asked **/
 } else if (process.argv.length < 3 || process.argv.includes("-i") || process.argv.includes("--interactive")) {

这开始成为代码的核心。这检测用户是否想要进入REPL模式

  console.log(`rattle v${package.version}`);
  var cmdline = repl.start("> "),
      context = cmdline.context;

使用标准提示创建repl,并获取VM上下文

  /** Insert config files **/
  fs.access(localrc = path.resolve(process.cwd(), ".noderc"), function(noLocal) {
    if (!noLocal) {
      insertFile(localrc, context);
    }
  });

测试是否有local.noderc,如果有则将其插入上下文

  fs.access(globalrc = path.resolve(__dirname, ".noderc"), function(noGlobal) {
    if (!noGlobal && globalrc !== localrc) {
      insertFile(globalrc, context);
    }
  });

测试global.noderc,并将其插入

} else {
  /** Defer to node.js **/
  var node = spawn("node", process.argv.slice(2));
  node.stdout.pipe(process.stdout);
  node.stderr.pipe(process.stderr);
}

剩下的部分只是将代码传递给节点,因为它不是REPL的东西

这写起来很有趣,希望对某些人有用。

祝你好运!