Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-im
提交
a4fc7237
U
uni-im
项目概览
DCloud
/
uni-im
通知
3
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-im
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a4fc7237
编写于
5月 08, 2024
作者:
maquan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复 云端扩展框架仅在部署到可写的云环境时才输出缓存文件
上级
6b6ed90f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
11 deletion
+28
-11
uniCloud/cloudfunctions/common/uni-im-ext/index.js
uniCloud/cloudfunctions/common/uni-im-ext/index.js
+28
-11
未找到文件。
uniCloud/cloudfunctions/common/uni-im-ext/index.js
浏览文件 @
a4fc7237
...
...
@@ -67,6 +67,7 @@
const
fs
=
require
(
'
fs
'
);
const
path
=
require
(
'
path
'
);
const
REGISTER_EXT_CACHE
=
'
./_registered_ext.js
'
let
isFsWritable
=
false
function
getSubdirs
(
parent
)
{
try
{
...
...
@@ -166,18 +167,26 @@ function loadExtensions() {
requires
.
push
(
`const e_
${
extSeq
}
= require('
${
modDir
.
replace
(
/
\\
/g
,
'
/
'
)}
');`
)
extSeq
++
}
moduleExports
=
Object
.
keys
(
moduleExports
).
map
(
exp
=>
{
return
`"
${
exp
}
": [
${
moduleExports
[
exp
].
join
(
'
,
'
)}
]`
}).
join
(
'
,
\n
'
)
// 输出缓存文件
let
registeredExtCache
=
`
// 把扫描到的扩展模块写入缓存文件
if
(
isFsWritable
)
{
moduleExports
=
Object
.
keys
(
moduleExports
).
map
(
exp
=>
{
return
`"
${
exp
}
": [
${
moduleExports
[
exp
].
join
(
'
,
'
)}
]`
}).
join
(
'
,
\n
'
)
try
{
// 输出缓存文件
let
registeredExtCache
=
`
${
requires
.
join
(
'
\n
'
)}
module.exports = {
${
moduleExports
}
}
`
fs
.
writeFileSync
(
path
.
join
(
__dirname
,
REGISTER_EXT_CACHE
),
registeredExtCache
)
fs
.
writeFileSync
(
path
.
join
(
__dirname
,
REGISTER_EXT_CACHE
),
registeredExtCache
)
}
catch
(
e
)
{
// 无法写缓存文件?
}
}
return
registeredExtensionPoints
}
...
...
@@ -191,12 +200,19 @@ let _registeredExtensionPointsPromise
* @returns {any[]} 该扩展点上挂接的所有扩展程序各自的返回值拼装在一个数组里。
*/
async
function
invokeExts
(
extensionPointName
,
...
args
)
{
isFsWritable
=
(
this
.
getCloudInfo
().
provider
===
'
aliyun
'
)
// 尝试从生成的缓存文件中加载
let
registeredExtensionPoints
=
{}
try
{
registeredExtensionPoints
=
require
(
REGISTER_EXT_CACHE
)
}
catch
(
e
)
{
// 尚无缓存
let
registeredExtensionPoints
if
(
isFsWritable
)
{
try
{
registeredExtensionPoints
=
require
(
REGISTER_EXT_CACHE
)
}
catch
(
e
)
{
// 尚未生成缓存文件
}
}
if
(
!
registeredExtensionPoints
)
{
// 懒加载,避免在调用接口重入时重复解析扩展模块
if
(
!
_registeredExtensionPointsPromise
)
{
_registeredExtensionPointsPromise
=
new
Promise
(
resolve
=>
{
...
...
@@ -207,6 +223,7 @@ async function invokeExts(extensionPointName, ...args) {
}
// console.log('invokeExts:', Object.keys(registeredExtensionPoints), extensionPointName, args)
// 找到指定的扩展点并调用
if
(
!
registeredExtensionPoints
[
extensionPointName
])
return
[]
return
Promise
.
all
(
registeredExtensionPoints
[
extensionPointName
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录