node.js – 我应该在哪里存储自定义CLI npm模块的缓存?

我正在开发一个npm模块,用户可以通过执行命令通过终端与它进行交互:

> mymodule init
> mymodule do stuff

执行某些命令时,会要求用户提供一些数据,这些数据将由模块使用.由于这些数据在使用模块时不会真正改变,并且由于这些命令可以非常频繁地执行,因此在任何时候运行命令时询问用户数据都不是最好的选择.所以我决定缓存这些数据,一旦它应该通过多个模块调用,我看到的最简单的存储方式是文件(数据结构允许将其存储在一个简单的JSON中).但我很确定这个文件应该放在用户的机器上.

我应该在文件系统中以文件的形式存储缓存,还是为自定义npm模块存储多个文件,考虑到模块本身可以在多个操作系统上全局安装,并且可以同时在多个项目中使用?

我正在考虑将其存储在模块的文件夹中,但是在全局安装多项目使用的情况下可能会很棘手.第二个想法是将它存储在特定于操作系统的tmp存储中,但我也不太确定.我也想知道在这种情况下是否有一些替代文件存储.

解决方法

在某些系统上,您可以通过创建存储缓存数据的子目录来缓存到〜/ .cache,尽管应用程序在用户主目录中创建隐藏目录更常见.在现代Windows机器上,您可以使用在C:/ Users / someUser / AppData中创建目录.在Windows中使用.后缀不会隐藏文件.我建议你做一些与平台无关的事情:

var path = require('path');

function getAppDir(appName,cb) {
    var plat = process.platform;

    var homeDir = process.env[(plat == 'win32') ? 'USERPROFILE' : 'HOME'];
    var appDir;

    if(plat == 'win32') {
        appDir = path.join(homeDir,'AppData',appName);
    }
    else {
        appDir = path.join(homeDir,'.' + appName);
    }

    fs.mkdir(appDir,function(err) {
        if(err) return cb(err);

        cb(null,appDir);
    })
}

只需声明一个函数获取app目录.这应该可以处理大多数系统,但如果遇到不适合的情况,它应该很容易修复,因为你可以在这里创建一些备用逻辑.假设您希望允许用户稍后在配置文件中指定应用数据的自定义位置,您可以轻松添加该逻辑.目前,对于大多数Unix / Linux系统和Windows Vista及更高版本,这应该适用于大多数情况.

存储在系统临时文件夹中,根据系统的不同,您的缓存可能会在间隔(cron)或重新启动时丢失.使用全局安装路径会导致一些问题.如果您需要每个项目的此数据都是唯一的,那么您可以扩展该功能以允许您将此数据存储在项目根目录中,而不是模块根目录中.最好不要将它存储在模块根目录中,即使它刚安装为本地/项目模块,因为用户无法在不包含整个模块的情况下将此文件夹包含在其存储库中.

因此,如果您需要存储与项目相关的缓存数据,那么您应该在项目根目录而不是node_modules中执行此操作.否则,以系统无关的方式将其存储在用户主目录中.

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...