javascript - 为基于 Node.js 的 CLI 的单个版本运行一次代码

标签 javascript node.js command-line-interface

我在 Node.js 中编写了一个 CLI,您可以使用 npm 进行全局安装。现在我想在用户第一次运行我的 CLI 时运行一段特定的代码。但它应该只运行一次

我的问题是:如何检测到 CLI 是第一次运行?

当然,我可以将文件写入用户的主目录,如果存在,则跳过代码执行。这将非常简单。

但现在事情变得稍微复杂一些:我希望在用户将 CLI 更新到新版本时重新运行此检查。因此,我可以再次将文件写入用户的主目录,并将版本存储在其中,为此我运行了“一次”代码块。

但这又意味着每次用户运行 CLI 时,它都必须打开文件、解析文件、查找版本等等。我担心这会对启动性能产生负面影响。

有没有更好的办法解决这个问题?

最佳答案

我有一个愚蠢的想法,将其视为 hacky 元编程的学术示例。创建一个名为 script.js 的脚本:

var fs = require('fs');

if(!process.env.firstRun){
  var content = fs.readFileSync("script.js", "utf8");
  fs.writeFileSync('script.js', 'process.env.firstRun=true;\r\n' + content, 'utf8');
  console.log('first run');
} else {
  console.log('next run');
}

如果未设置,脚本会通过在开头添加额外的标志声明来简单地覆盖自身。否则它会走另一条路:

λ node .\script.js
first run

λ node .\script.js
next run

λ node .\script.js
next run

以上纯属娱乐。对于生产代码,您应该按照您的建议使用配置文件。根据this method,读取单个小文件没什么大不了的在我的设置(I5 处理器、SSD 驱动器)中花费 <0.5 毫秒,所以这绝对是一个可行的方法。

关于javascript - 为基于 Node.js 的 CLI 的单个版本运行一次代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613022/

相关文章:

node.js - Ramda 在 Mongoose 查询回调中不起作用

node.js - 尝试启动包裹开发服务器时出现问题

php - 如何在 Windows 上使用命令行访问 PHP?

javascript - 如何使用一个文本框打印 99 以内的两位数和 999 到 100 之间的三位数?

javascript - 在 Node.js 中注册成功后直接进行身份验证(登录)

javascript - JQuery - 鼠标离开

javascript - JSON.parse 无法将字符串更改为对象

javascript - 如何在 React 中向其他组件传递值

zend-framework - ZF-Autoloader 无法在 Ubuntu 上的 UnitTests 中工作

linux - # vs $ 在文章中记录代码时