使用npm / nodejs命令行实用程序坚持用户首选项的最佳方法
我正在编写一个nodejs cli工具(旨在全局安装的NPM模块),它将需要存储一些用户提供的值。 在系统上存储这些值的最佳方法是什么?
例如,我应该在/etc/{my-utility-name}/conf.json
下创build自己的configuration文件,并在install
脚本中初始化此目录+文件
( https://npmjs.org/doc/misc/npm-scripts.html )
看看这些问题和意见,我认为有两个问题需要解决:
-
在哪里保存 :如果有用户特定的设置,那么通过Linux中的常见模式,它最好保存在用户主目录的隐藏目录中。 因此,您最好将其保存在$ HOME /。{yourAppName} / someFile目录中
例如:Pidgin将它保存在: /home/kushal/.purple / ... (“。”前缀到文件夹名称使其隐藏)
您可以将其保存在: /home/$HOME/.myawesomeNPMModule / ...
注意:如果你也是针对Windows平台,那么你需要一个平台检查,并决定使用哪个path。
在Windows Vista和以上,它进入 $ WIN_INSTALLATION_DRIVE \用户\ $用户名\ AppData的\本地\ YourAppName ...
在Windows XP中,它进入 $ WIN_INSTALLATION_DRIVE \ Documents and Settings \ $ USER_NAME \ Local Settings \ Application Data \ Local \ YourAppName \ ...
是的跨平台让生活变得困难,或者至less增加了一些IF声明。 ;)
-
如何保存 :您可以轻松地将凭据保存在JSON文件中。 现在,由于您需要保护数据并且不能通过非法访问来读取数据,所以最好的方法是对数据进行encryption。 NodeJs Crypto模块非常易于使用,您可以用几行来encryption/解密您的设置文件。 您的应用程序将只知道encryption密码,因此您的应用程序将只能解密它。
我会推荐AES-192encryption文件。
希望能帮助到你!!
如果您的设置数量有限,则可以使用JSON文件。 如果你有一个更详细的设置或configuration,考虑使用类似SQLite文件,更容易检索。
无论如何,将该文件保存在不需要提升权限的目录中。 另外,如果它对用户是唯一的,可以考虑将文件保存在用户的主目录下。
我编写了cli-config API来pipe理NodeJS应用程序configuration,包括:
- 包装默认
- 本地用户configuration
- 命令行选项
- 应用程序覆盖
请访问https://github.com/tohagan/cli-config了解更多详情。
例1:
将软件包文件defaults.config
configuration选项合并到~/.<appname>.config
然后命令行选项中,然后强制debug
选项为true
。 使用浅层合并,只有顶层属性被合并。
var config = require('../cli-config') .getConfig({dirname: __dirname, override: {debug: true}});
例2:
从包defaults.config
深入合并嵌套的configuration设置,然后./config.json
然后命令行选项。 如果./config.json
不存在,请从defaults.config
复制副本,以便用户可以使用它来覆盖将来的defaults.config
。
var config = require('../cli-config').getConfig({ dirname: __dirname, clone: true, configFile: './config.json', merge: 'deep' });
例3:
命令行parsing器返回可用于覆盖系统设置或用户设置选项的对象。 您可以使用cli选项来configuration此parsing器。 有关命令行parsing选项的更多详细信息,请参阅minimist 。
var config = require('../cli-config').getConfig({ dirname: __dirname, cli: { boolean: { 'd': 'debug', 'v': 'verbose' } } });
将config.debug和config.verbose选项设置为true。
$ myapp -d -v