我正在编写一个nodejs cli实用程序(旨在全局安装的NPM模块),需要存储一些用户提供的值。在系统上存储这些值的最佳方法是什么?
例如,我应该在say /etc/{my-utility-name}/conf.json
下创建我自己的配置文件,并在我的install
脚本中初始化此目录+文件
答案 0 :(得分:4)
看看问题和评论我认为有两个问题需要解决:
保存位置:如果有用户特定的设置,那么通过Linux中的通用模式,它最好保存在用户主目录的隐藏目录中。因此,您最好将其保存在目录$ HOME /。{yourAppName} / someFile
中E.x: Pidgin saves it in: /home/kushal/.purple/... ("." prefix to folder name makes it hidden)
You can save it in: /home/$HOME/.myawesomeNPMModule/...
注意:如果您还要定位Windows平台,则需要进行平台检查并确定要使用的路径。
In windows Vista and above it goes in $WIN_INSTALLATION_DRIVE\Users\$USER_NAME\AppData\Local\YourAppName...
In windows XP it goes in $WIN_INSTALLATION_DRIVE\Documents and Settings\$USER_NAME\Local Settings\Application Data\Local\YourAppName\...
是跨平台让生活变得困难,或者至少增加了几个IF语句。 ;)
如何保存:您可以轻松地将凭据保存在JSON文件中。现在,由于您需要保护数据并且不通过非法访问来读取数据,因此最好的方法是对其进行加密。 NodeJs Crypto模块非常易于使用,您可以在几行中使用它来加密/解密您的设置文件。您的应用程序只会知道加密密码,因此您的应用程序只能解密它。
我建议使用AES-192加密文件。
希望它有所帮助!!
答案 1 :(得分:1)
如果您的设置数量有限,则可以使用JSON文件。如果您有更复杂的设置或配置,请考虑使用类似SQLite文件的内容,以便于检索。
无论如何,请将该文件保存在不需要提升权限的目录中。此外,如果它对用户是唯一的,可以考虑将文件保存在用户的主目录下。
答案 2 :(得分:1)
我编写了 cli-config API来管理NodeJS应用配置,包括:
访问https://github.com/tohagan/cli-config了解详情。
合并包文件defaults.config
中的配置选项,然后~/.<appname>.config
然后命令行选项,然后强制debug
选项为true
。使用浅合并,只合并顶级属性。
var config = require('../cli-config')
.getConfig({dirname: __dirname, override: {debug: true}});
从包defaults.config
深入合并嵌套配置设置,然后./config.json
,然后命令行选项。如果./config.json
不存在,请从defaults.config
克隆副本,以便用户以后可以使用它来覆盖defaults.config
。
var config = require('../cli-config').getConfig({
dirname: __dirname,
clone: true,
configFile: './config.json',
merge: 'deep'
});
命令行解析器返回一个对象,该对象可用于覆盖系统设置或用户设置选项。您可以使用 cli 选项配置此解析器。有关命令行解析选项的更多详细信息,请参阅minimist。
var config = require('../cli-config').getConfig({
dirname: __dirname,
cli: {
boolean: {
'd': 'debug',
'v': 'verbose'
}
}
});
将config.debug和config.verbose选项设置为true。
$ myapp -d -v
答案 3 :(得分:0)
我发现yeoman项目有一个名为configstore的软件包。我试用了该API,该API非常简单易用,并且抽象出了所有担心操作系统兼容性的需求。
获取和设置配置非常简单:
const Configstore = require('configstore')
const config = Configstore(packageName, defaults)
config.set(key, value)
config.get(key)
Yeoman是一个经过充分测试的大型项目,因此他们在项目中构建并使用它的事实应表明这是一个可以在自己的项目中使用的安全稳定的软件包。