代码之家  ›  专栏  ›  技术社区  ›  Golo Roden

为节点的单个版本运行一次代码。基于js的CLI

  •  1
  • Golo Roden  · 技术社区  · 7 年前

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

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

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

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

    但这同样意味着,每次用户运行CLI时,都必须打开文件、解析文件、查找版本,等等。我担心这会对创业绩效产生负面影响。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   jedzej    7 年前

    我有一个愚蠢的想法,把这当作一个学术上的黑客元编程的例子。创建一个名为 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 这需要<在我的设置中是0.5毫秒(I5处理器、SSD驱动器),所以这绝对是一个不错的选择。