摘要:一句話介紹是一個(gè)強(qiáng)大的配置文件加載器,無(wú)論你喜歡還是,都能滿足你的愿望,并且更加簡(jiǎn)單更加強(qiáng)大。
一句話介紹
Confman 是一個(gè)強(qiáng)大的配置文件加載器,無(wú)論你喜歡 yaml 、cson、json、properties、plist、ini、toml、xml 還是 js,都能滿足你的愿望,并且更加簡(jiǎn)單、更加強(qiáng)大。
支持的特性
支持多種配置文件格式,默認(rèn)包括 yaml/cson/json/properties/plist/ini/toml/xml/js
支持配置文件相互引用,無(wú)論何種格式都可以「引用其它任意格式」的配置文件
支持「基于目錄」的多文件配置
支持「環(huán)境配置」,區(qū)分加載生產(chǎn)、測(cè)試等不同的配置
可以非常方便的「擴(kuò)展」新的配置文件格式
可以「混合使用」不同的配置文件格式
內(nèi)置多種「指令」,并可輕易的擴(kuò)展新的指令
現(xiàn)在就安裝$ npm install confman --save來(lái)幾個(gè)示例 不同的環(huán)境配置
目錄
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);
啟動(dòng)應(yīng)用
$ NODE_ENV=prod node index.js
通過(guò)指定 NODE_ENV 可以加載指定的「環(huán)境配置文件 config.prod.yaml」,并和「默認(rèn)配置 config.yaml」進(jìn)行合并,
如果有相同的配置,「環(huán)境配置會(huì)覆蓋默認(rèn)配置」
文件一: test1.yaml
name: test1 #可以使用 $require 引用其它文件 child: $requrie ./test2
文件二: test2.json
{ "name": "test2", "child": "$require other-file" }
$require 可以在任意支持的格式的配置文件中使用
基于目錄的多文件配置目錄結(jié)構(gòu)
├── 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);添加新格式
其實(shí),多數(shù)情況你不需要這么做,如果確實(shí)有需要,你可這樣編寫(xiě)一個(gè)自定義 loader
module.exports = { extname: ".xxx", load: function (configPath) { //... return configs; } };
注冊(cè)自定義 loader
confman.loaders.push(require("your-loader-path"));新的擴(kuò)展名
方式一,映射到一個(gè)已經(jīng)添加的 loader
confman.loaders.push({ extname: ".xxx", loader: ".yaml" });
方式二,直接映射到一個(gè)未添加的自定義 loader
confman.loaders.push({ extname: ".xxx", loader: require("your-loader-path") });內(nèi)置的指令
如上邊用到的 $require,Confman 允許使用指令完成某些配置,內(nèi)置的指令包括:
$require 引用指令,用于引用其它配置文件,參數(shù)為相對(duì)于當(dāng)前文件的相對(duì)路徑或絕對(duì)路徑
$calc 計(jì)算指令,用于計(jì)算一個(gè)表達(dá)式,如 $calc root.baseUrl+"/xxx" (表達(dá)式中可用變量有 root:根對(duì)象,parent:父對(duì)象,self:當(dāng)前對(duì)象)
$read 讀取指令,用于讀取一個(gè)文本文件,參數(shù)為相對(duì)于當(dāng)前文件的相對(duì)路徑或絕對(duì)路徑
示例 example.yaml
name: example test1: $require ./test1.json test2: $read ./test2.txt test3: $calc root.name + ":test3"
假如 test1.json 的內(nèi)容為 { "name": "test1" },test2.txt 的內(nèi)容為 my name is test2,
通過(guò) Confman.load("./example") 加載 example 的結(jié)果為:
{ "name": "example", "test1": { "name": "test1" }, "test2": "my name is test2", "test3": "example:test3" }自定義指令
編寫(xiě)一個(gè)自定義指令的代碼如下:
module.exports = { name: "xxx", exec: function(context){ //context.fromPath 來(lái)自哪個(gè)配置文件 //context.parser 當(dāng)前 Confman 實(shí)例 //context.root 根對(duì)象 //context.parent 父對(duì)象 //context.self 當(dāng)前對(duì)象 //context.name 配置屬性名 //context.value 指令后的值 return {} //返回值為指令執(zhí)行結(jié)果 } };
注冊(cè)自定義指令
confman.directives.push(require("your_directive_path"));其它的問(wèn)題
新的建議或 Bug 請(qǐng)使用 isseus 反饋
貢獻(xiàn)代碼,請(qǐng)使用 Pull Request,需一并提交相關(guān)測(cè)試并且不能低于現(xiàn)有覆蓋率
現(xiàn)在或?qū)?lái)有可能會(huì)用到?那你應(yīng)該去加個(gè) Star
GitHub : https://github.com/Houfeng/co...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/86440.html
摘要:配置無(wú)入口的在輸出時(shí)的文件名稱。配置發(fā)布到線上資源的前綴,為類型。則是用于配置這個(gè)異步插入的標(biāo)簽的值。配置以何種方式導(dǎo)出庫(kù)。是字符串的枚舉類型,支持以下配置。在為時(shí),配置將沒(méi)有意義。是可選配置項(xiàng),類型需要是其中一個(gè)。 webpack配置 查看所有文檔頁(yè)面:全棧開(kāi)發(fā),獲取更多信息。原文鏈接:第2章 配置,原文廣告模態(tài)框遮擋,閱讀體驗(yàn)不好,所以整理成本文,方便查找。 配置 Webpack...
摘要:打包分析與性能優(yōu)化背景在去年年末參與的一個(gè)項(xiàng)目中,項(xiàng)目技術(shù)棧使用,生產(chǎn)環(huán)境全量構(gòu)建將近三分鐘,項(xiàng)目業(yè)務(wù)模塊多達(dá)數(shù)百個(gè),項(xiàng)目依賴數(shù)千個(gè),并且該項(xiàng)目協(xié)同前后端開(kāi)發(fā)人員較多,提高構(gòu)建效率,成為了改善團(tuán)隊(duì)開(kāi)發(fā)效率的關(guān)鍵之一。 webpack打包分析與性能優(yōu)化 背景 在去年年末參與的一個(gè)項(xiàng)目中,項(xiàng)目技術(shù)棧使用react+es6+ant-design+webpack+babel,生產(chǎn)環(huán)境全量構(gòu)建將...
摘要:以為例,編寫(xiě)來(lái)幫助我們完成重復(fù)的工作編譯壓縮我只要執(zhí)行一下就可以檢測(cè)到文件的變化,然后為你執(zhí)行一系列的自動(dòng)化操作,同樣的操作也發(fā)生在這些的預(yù)處理器上。的使用是針對(duì)第三方類庫(kù)使用各種模塊化寫(xiě)法以及語(yǔ)法。 showImg(https://segmentfault.com/img/bVbtZYK); 一:前端工程化的發(fā)展 很久以前,互聯(lián)網(wǎng)行業(yè)有個(gè)職位叫做 軟件開(kāi)發(fā)工程師 在那個(gè)時(shí)代,大家可能...
摘要:之輸出的最后就是為了得到打包結(jié)果。在這里可以看到很多相似,但是有不同含義的名次,如和,和,那他們有什么區(qū)別呢而這里的又是什么意思呢將多個(gè)模塊打包之后的代碼集合稱為。在這樣打包的話,會(huì)報(bào)錯(cuò)。所以就想搞明白這兩個(gè)的區(qū)別到底是什么。webpack之輸出 webpack的最后就是為了得到打包結(jié)果。 那這是一個(gè)怎么樣的過(guò)程,不同的配置,會(huì)有什么樣的結(jié)果呢? 本文的原文在我的博客中:github.com...
摘要:環(huán)境變量法通過(guò)上一節(jié)的源碼分析,我們知道了的作用,那么如何使用或者優(yōu)雅的使用來(lái)解決依賴加載問(wèn)題呢嘗試一最為直接的是,修改系統(tǒng)的環(huán)境變量。 模塊加載痛點(diǎn) 大家也或多或少的了解node模塊的加載機(jī)制,最為粗淺的表述就是依次從當(dāng)前目錄向上級(jí)查詢node_modules目錄,若發(fā)現(xiàn)依賴則加載。但是隨著應(yīng)用規(guī)模的加大,目錄層級(jí)越來(lái)越深,若是在某個(gè)模塊中想要通過(guò)require方式以依賴名稱或相對(duì)路...
閱讀 2089·2021-11-02 14:48
閱讀 2763·2019-08-30 14:19
閱讀 2934·2019-08-30 13:19
閱讀 1302·2019-08-29 16:17
閱讀 3239·2019-08-26 14:05
閱讀 2994·2019-08-26 13:58
閱讀 3082·2019-08-23 18:10
閱讀 1110·2019-08-23 18:04