使用npm / nodejs命令行实用程序坚持用户首选项的最佳方法

我正在编写一个nodejs cli工具(旨在全局安装的NPM模块),它将需要存储一些用户提供的值。 在系统上存储这些值的最佳方法是什么?

例如,我应该在/etc/{my-utility-name}/conf.json下创build自己的configuration文件,并在install脚本中初始化此目录+文件

( https://npmjs.org/doc/misc/npm-scripts.html )

看看这些问题和意见,我认为有两个问题需要解决:

  1. 在哪里保存 :如果有用户特定的设置,那么通过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声明。 ;)

  2. 如何保存 :您可以轻松地将凭据保存在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.configconfiguration选项合并到~/.<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