Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
9d05dcd4
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3172
Star
105
Fork
804
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
93
列表
看板
标记
里程碑
合并请求
67
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
93
Issue
93
列表
看板
标记
里程碑
合并请求
67
合并请求
67
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
9d05dcd4
编写于
6月 23, 2022
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update uni-config-center
上级
f9589a5f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
58 addition
and
50 deletion
+58
-50
docs/uniCloud/uni-config-center.md
docs/uniCloud/uni-config-center.md
+58
-50
未找到文件。
docs/uniCloud/uni-config-center.md
浏览文件 @
9d05dcd4
uni-config-center
插件的下载地址:
[
https://ext.dcloud.net.cn/plugin?id=4425
](
https://ext.dcloud.net.cn/plugin?id=4425
)
`uni-config-center`
插件的下载地址:
[
https://ext.dcloud.net.cn/plugin?id=4425
](
https://ext.dcloud.net.cn/plugin?id=4425
)
#
为什么使用uni-config-center
#
需求背景
实际开发中很多插件/云函数/公共模块需要配置文件才可以正常运行,如果每个都单独进行配置的话就会产生下面这样的目录结构。
实际开发中很多插件/云函数/公共模块需要配置文件才可以正常运行,
比如各种appkey、secret。存放在数据库里的话,拖累云函数性能,并且增加数据库请求。
如果每个都单独进行配置的话就会产生下面这样的目录结构。
```
text
cloudfunctions
├─common
│ └─user-utils // user-utils公共模块
│ ├─custom-token.js // user-utils依赖的其他文件
│ └─config.json // user-utils使用的配置文件
├─payment-config-test // payment-config-test云函数
│ └─config.json // payment-config-test使用的配置文件
└─user-config-test // 引用user-utils的云函数
├─cf1 // cf1云函数
│ │─index.js
│ └─config.json // cf1使用的配置文件
└─cf2 // cf2云函数
│─index.js
└─config.json // cf2使用的配置文件
```
可以看到配置文件分散在各个地方,毫无章法,维护起来也是一个大麻烦。
可以看到这样有很多问题:
1.
配置文件分散在各个地方,无法统一维护
2.
配置和代码没有分离。更新云函数会覆盖配置。如果使用插件,插件作者更新云函数后,那么用户侧的配置会被覆盖
3.
多个云函数之间无法共享配置
uni-config-center就是用了统一管理这些配置文件的,使用uni-config-center后的目录结构如下
`uni-config-center`
解决了上述问题。通过独立了公共模块,统一管理配置文件,做到配置和代码分离,更新代码不会覆盖配置,并且可以在多个云函数之间共享配置。
使用
`uni-config-center`
后的目录结构如下
```
text
cloudfunctions
├─common
│ ├─uni-config-center
│ │ ├─
payment
// 插件配置目录
│ │ ├─
cf1
// 插件配置目录
│ │ │ └─config.json // 插件配置文件
│ │ └─user-utils // 插件配置目录
│ │ ├─custom-token.js // 插件依赖的其他文件
│ │ └─cf2 // 插件配置目录
│ │ └─config.json // 插件配置文件
│ └─user-utils // user-utils公共模块,此公共模块内使用user-utils插件的配置
├─payment-config-test // payment-config-test云函数,此云函数内使用payment插件的配置
└─user-config-test // 引用user-utils的云函数
├─cf1 // cf1云函数
└─cf2 // cf2云函数
```
使用uni-config-center后的优势
-
配置文件统一管理,分离插件主体和配置信息,更新插件更方便
-
支持对config.json设置schema,插件使用者在HBuilderX内编写config.json文件时会有更好的提示(后续HBuilderX会提供支持)
# 用法
在要使用uni-config-center的公共模块或云函数内引入uni-config-center依赖,请参考:
[
使用公共模块
](
https://uniapp.dcloud.net.cn/uniCloud/cf-common
)
## 导入和创建配置
以下以在云函数
`user-config-test`
内使用
`uni-config-center`
为例,分步骤讲解如何使用
例如,在云函数
`cf2`
内使用
`uni-config-center`
,步骤如下:
1.
从插件市场导入本插件到项目内
2.
在云函数
`user-config-test`
上右键选择
`管理公共模块依赖`
3.
弹窗中勾选
`uni-config-center`
公共模块后点击
`更新依赖`
4.
在
`cloudfunctions/common/uni-config-center`
目录创建存放配置的目录,在本示例中我们使用
`user-utils`
作为配置目录名
5.
在上一步创建的
`user-utils`
目录下创建配置文件
`config.json`
6.
如何在代码中获取配置请参考下面的章节
1.
导入
`uni-config-center`
公共模块到项目内
> 存放路径是 uniCloud/cloudfunctions/common/uni-config-center。
> 一般uniCloud项目创建时会自动导入这个基础插件,如项目没有该插件,请在插件市场下载[https://ext.dcloud.net.cn/plugin?id=4425](https://ext.dcloud.net.cn/plugin?id=4425)
2.
给云函数添加公共模块依赖
> 在云函数`cf2`上右键选择`管理公共模块依赖`,弹窗中勾选`uni-config-center`公共模块
3.
新建插件配置目录
> 在`cloudfunctions/common/uni-config-center`目录新建插件配置目录,在本示例中我们使用`share-config`作为插件配置目录名(uni-config-center下不同的配置,被称为**插件配置**。这个插件的概念容易和插件市场的插件混淆,请注意区分)
4.
新建插件配置文件
> 在上一步创建的`share-config`目录下创建配置文件`config.json`(这个文件的名称不能自定义),在`config.json`里编写基于json的配置内容。
至此多云函数/公共模块共享的配置就创建完成了,目录结构如下
...
...
@@ -57,31 +59,37 @@ cloudfunctions
cloudfunctions
├─common
│ └─uni-config-center
│ └─
user-utils //
配置目录
│ └─
share-config // 插件
配置目录
│ └─config.json // 配置文件
└─
user-config-test // 引用user-utils
的云函数
└─
cf2 // 引用share-config
的云函数
```
**注意**
-
如需在不同项目使用同一服务空间,请务必注意两个项目的uni-config-center在上传时会互相覆盖。建议将云端代码放在同一个项目内,其他项目关联存放云端代码的项目的服务空间。
-
推荐插件配置名称(也就是上述示例中的
`share-config`
)尽量无歧义。如果只为一个云函数提供配置,那么这个配置的名称建议和云函数的名称一致。尤其是插件作者,更要注意插件配置名称包含插件前缀,防止和用户代码冲突。
-
如需在不同项目使用同一服务空间,请务必注意两个项目的
`uni-config-center`
在上传时会互相覆盖。建议将云端代码放在同一个项目内,其他项目关联存放云端代码的项目的服务空间。
##
简单示例
##
云函数中读取配置
以上述目录结构为例,在云函数
`
user-config-test`
内获取user-utils
配置目录下的配置内容,示例代码如下
以上述目录结构为例,在云函数
`
cf2`
内获取
`share-config`
配置目录下的配置内容,示例代码如下
```
js
//
user-config-test
/index.js
//
cf2
/index.js
const
createConfig
=
require
(
'
uni-config-center
'
)
const
userUtils
Config
=
createConfig
({
// 获取配置实例
pluginId
:
'
user-utils
'
// common/uni-config-center下的
配置目录名
const
share
Config
=
createConfig
({
// 获取配置实例
pluginId
:
'
share-config
'
// common/uni-config-center下的插件
配置目录名
})
const
Config
=
userUtilsConfig
.
config
()
// 获取common/uni-config-center/user-utils
/config.json的内容
const
Config
=
shareConfig
.
config
()
// 获取common/uni-config-center/share-config
/config.json的内容
exports
.
main
=
async
function
(
event
,
context
)
{
console
.
log
(
Config
)
//打印配置
}
```
**注意**
-
`uni-config-center`
下的配置不隔离。一个云函数或公共模块,引入了
`uni-config-center`
后,下面的所有插件配置都可以访问到
-
`uni-config-center`
的配置是只读的。除非重新上传更新uniCloud服务空间,否则不会变化。如需在代码运行期间修改配置,那么需要改用
[
redis
](
https://uniapp.dcloud.net.cn/uniCloud/redis-introduction.html
)
详细接口说明请阅读下方文档。
## 获取配置实例
...
...
@@ -112,15 +120,15 @@ createConfig({
```
js
const
createConfig
=
require
(
'
uni-config-center
'
)
const
userUtils
Config
=
createConfig
({
pluginId
:
'
user-utils
'
,
// 同common/uni-config-center下的配置目录名
const
share
Config
=
createConfig
({
pluginId
:
'
share-config
'
,
// 同common/uni-config-center下的配置目录名
defaultConfig
:
{
// 默认配置
tokenExpiresIn
:
7200
,
tokenExpiresThreshold
:
600
,
},
customMerge
:
function
(
defaultConfig
,
userConfig
)
{
// 自定义默认配置和用户配置的合并规则,不设置的情况下会对默认配置和用户配置进行深度合并
// defaudltConfig 默认配置
// userConfig
用户配置
// userConfig
config-center内的配置文件内容
return
Object
.
assign
(
defaultConfig
,
userConfig
)
}
})
...
...
@@ -133,26 +141,26 @@ const userUtilsConfig = createConfig({
```
js
// 获取配置
userUtils
Config
.
config
()
// 获取全部配置,没有获取到配置时返回空对象
userUtils
Config
.
config
(
'
tokenExpiresIn
'
)
// 传入参数名获取指定配置
userUtils
Config
.
config
(
'
service.sms.codeExpiresIn
'
)
// 传入参数路径获取指定配置
userUtils
Config
.
config
(
'
tokenExpiresThreshold
'
,
600
)
// 获取指定配置,如果不存在则取传入的默认值
share
Config
.
config
()
// 获取全部配置,没有获取到配置时返回空对象
share
Config
.
config
(
'
tokenExpiresIn
'
)
// 传入参数名获取指定配置
share
Config
.
config
(
'
service.sms.codeExpiresIn
'
)
// 传入参数路径获取指定配置
share
Config
.
config
(
'
tokenExpiresThreshold
'
,
600
)
// 获取指定配置,如果不存在则取传入的默认值
```
## 获取配置目录下的文件的绝对路径
```
js
userUtilsConfig
.
resolve
(
'
custom-token.js
'
)
// 获取uni-config-center/user-utils
/custom-token.js文件的路径
shareConfig
.
resolve
(
'
custom-token.js
'
)
// 获取uni-config-center/share-config
/custom-token.js文件的路径
```
## 引用配置目录下的js、json文件
```
js
userUtilsConfig
.
requireFile
(
'
custom-token.js
'
)
// 使用require方式引用uni-config-center/user-utils
/custom-token.js文件。文件不存在时返回undefined,文件内有其他错误导致require失败时会抛出错误。
shareConfig
.
requireFile
(
'
custom-token.js
'
)
// 使用require方式引用uni-config-center/share-config
/custom-token.js文件。文件不存在时返回undefined,文件内有其他错误导致require失败时会抛出错误。
```
## 判断配置目录下是否存在指定文件
```
js
userUtils
Config
.
hasFile
(
'
custom-token.js
'
)
// 配置目录是否包含某文件,true: 文件存在,false: 文件不存在
share
Config
.
hasFile
(
'
custom-token.js
'
)
// 配置目录是否包含某文件,true: 文件存在,false: 文件不存在
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录