> mymodule init > mymodule do stuff
执行某些命令时,会要求用户提供一些数据,这些数据将由模块使用.由于这些数据在使用模块时不会真正改变,并且由于这些命令可以非常频繁地执行,因此在任何时候运行命令时询问用户数据都不是最好的选择.所以我决定缓存这些数据,一旦它应该通过多个模块调用,我看到的最简单的存储方式是文件(数据结构允许将其存储在一个简单的JSON中).但我很确定这个文件应该放在用户的机器上.
我应该在文件系统中以文件的形式存储缓存,还是为自定义npm模块存储多个文件,考虑到模块本身可以在多个操作系统上全局安装,并且可以同时在多个项目中使用?
我正在考虑将其存储在模块的文件夹中,但是在全局安装多项目使用的情况下可能会很棘手.第二个想法是将它存储在特定于操作系统的tmp存储中,但我也不太确定.我也想知道在这种情况下是否有一些替代文件存储.
解决方法
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中执行此操作.否则,以系统无关的方式将其存储在用户主目录中.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。