javascript - 有一个 NodeJS CLI 的启动脚本

标签 javascript node.js terminal

如何将启动脚本添加到 node.js cli?例如。 需要模块或设置一些选项?

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

最佳答案

当我阅读您的帖子时,我意识到当前的 Node.js REPL 很糟糕!所以我对你的帖子的功能做了一个基本的演示,我称之为 rattle .

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

#!/usr/bin/env node

这是 shebang,它确保它作为 Node 运行

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);
    }
  });

测试是否有本地.noderc,如果有则插入到上下文中

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

    }
  });

测试全局.noderc,并插入

} else {
  /** Defer to node.js **/

  var node = spawn("node", process.argv.slice(2));

  node.stdout.pipe(process.stdout);

  node.stderr.pipe(process.stderr);
}

剩下的只是将代码传递给 Node ,因为它不是 REPL 的东西

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

祝你好运!

关于javascript - 有一个 NodeJS CLI 的启动脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546338/

相关文章:

javascript - React useLocation hook 的替代方案用于基于 url 的页面更新?

javascript - React Native 使长图像适合屏幕宽度并滚动

node.js - 是否有可能在 Azure 上获得 IIS 的免费 ssl 证书

javascript - 当我在 Node JS 中调用 Modernizr.build 时,范围行为非常不寻常

c - 使用 C 语言的终端控制代码

在 Zend Studio 中生成 Javascript 和突出显示的 PHP 脚本

javascript - 了解Node.JS使用async.waterfall如何执行外部功能

linux - 如何将命令的输出直接复制到剪贴板?

terminal - fish 终端突出显示 1 个文件夹及其大部分子文件夹

javascript - 在网站中点击“赞”应该在 Facebook 中点击“赞”