npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

confman

v0.2.12

Published

最好用的配置加载器

Downloads

91

Readme

一句话介绍

Confman 是一个强大的配置文件加载器,无论你喜欢 yaml 、cson、json、properties、plist、ini、toml、xml 还是 js,都能满足你的愿望,并且更加简单、更加强大。

npm version Build Status

支持的特性

  • 支持多种配置文件格式,默认包括 yaml/cson/json/properties/plist/ini/toml/xml/js
  • 支持配置文件相互引用,无论何种格式都可以「引用其它任意格式」的配置文件
  • 支持「基于目录」的多文件配置
  • 支持「环境配置」,区分加载生产、测试等不同的配置
  • 可以非常方便的「扩展」新的配置文件格式
  • 可以「混合使用」不同的配置文件格式
  • 内置多种「指令」,并可轻易的扩展新的指令

现在就安装

$ npm install confman --save

来几个示例

不同的环境配置

目录

app
├── index.js
├── config.dev.yaml
├── config.prod.yaml
└── config.yaml

index.js

const confman = require('confman');
const configs = confman.load(`${__dirname}/config`);
console.log(configs);

启动应用

$ NODE_ENV=prod node index.js 

通过指定 NODE_ENV 可以加载指定的「环境配置文件 config.prod.yaml」,并和「默认配置 config.yaml」进行合并, 如果有相同的配置,「环境配置会覆盖默认配置」

配置文件相互引用

文件一: test1.yaml

name: test1
#可以使用 $require 引用其它文件
child: $requrie ./test2

文件二: test2.json

{
  "name": "test2",
   "child": "$require other-file"
}

$require 可以在任意支持的格式的配置文件中使用

基于目录的多文件配置

目录结构

├── config
│   ├── conn.yaml
│   ├── index.yaml
│   └── mvc.yaml
├── config.dev
│   └── conn.yaml
├── config.prod
│   └── conn.yaml
└── index.js

index.js

const confman = require('confman');
const configs = confman.load(`${__dirname}/config`);
console.log(configs);

添加新格式

其实,多数情况你不需要这么做,如果确实有需要,你可这样编写一个自定义 loader

module.exports = {
  extname: '.xxx',
  load: function (configPath) {
    //...
    return configs;
  }
};

注册自定义 loader

confman.loaders.push(require('your-loader-path'));

新的扩展名

方式一,映射到一个已经添加的 loader

confman.loaders.push({
  extname: '.xxx',
  loader: '.yaml'
});

方式二,直接映射到一个未添加的自定义 loader

confman.loaders.push({
  extname: '.xxx',
  loader: require('your-loader-path')
});

内置的指令

如上边用到的 $require,Confman 允许使用指令完成某些配置,内置的指令包括:

  • $require 引用指令,用于引用其它配置文件,参数为相对于当前文件的相对路径或绝对路径
  • $calc 计算指令,用于计算一个表达式,如 $calc root.baseUrl+"/xxx" (表达式中可用变量有 root:根对象,parent:父对象,self:当前对象)
  • $read 读取指令,用于读取一个文本文件,参数为相对于当前文件的相对路径或绝对路径

示例 example.yaml

name: example
test1: $require ./test1.json
test2: $read ./test2.txt
test3: $calc root.name + ":test3"

假如 test1.json 的内容为 { "name": "test1" }test2.txt 的内容为 my name is test2, 通过 Confman.load('./example') 加载 example 的结果为:

{
  "name": "example",
  "test1": { "name": "test1" },
  "test2": "my name is test2",
  "test3": "example:test3"
}

自定义指令

编写一个自定义指令的代码如下:

module.exports = {
  name: 'xxx',
  exec: function(context){
    //context.fromPath 来自哪个配置文件
    //context.parser 当前 Confman 实例
    //context.root 根对象
    //context.parent 父对象
    //context.self 当前对象
    //context.name 配置属性名
    //context.value 指令后的值
    return {} //返回值为指令执行结果
  }
};

注册自定义指令

confman.directives.push(require('your_directive_path'));

其它的问题

  • 新的建议或 Bug 请使用 isseus 反馈
  • 贡献代码,请使用 Pull Request,需一并提交相关测试并且不能低于现有覆盖率