Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qianlong66
uni-app
提交
ec468f85
U
uni-app
项目概览
qianlong66
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ec468f85
编写于
7月 07, 2022
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(mp): disable descriptor cache (#3685)
上级
e7fd101c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
56 addition
and
21 deletion
+56
-21
packages/uni-mp-vite/src/plugin/index.ts
packages/uni-mp-vite/src/plugin/index.ts
+7
-21
packages/uni-mp-vite/src/plugin/polyfill.ts
packages/uni-mp-vite/src/plugin/polyfill.ts
+49
-0
未找到文件。
packages/uni-mp-vite/src/plugin/index.ts
浏览文件 @
ec468f85
...
...
@@ -12,11 +12,7 @@ import {
AppJson
,
resolveVueI18nRuntime
,
}
from
'
@dcloudio/uni-cli-shared
'
import
type
{
SFCDescriptor
,
SFCScriptBlock
,
SFCScriptCompileOptions
,
}
from
'
@vue/compiler-sfc
'
import
type
{
CompilerOptions
}
from
'
@dcloudio/uni-mp-compiler
'
import
{
uniOptions
}
from
'
./uni
'
...
...
@@ -25,6 +21,10 @@ import { createConfigResolved } from './configResolved'
import
{
emitFile
,
getFilterFiles
,
getTemplateFiles
}
from
'
./template
'
import
{
getNVueCssPaths
}
from
'
../plugins/pagesJson
'
import
{
rewriteCompilerSfcParseOnce
,
rewriteCompileScriptOnce
,
}
from
'
./polyfill
'
export
interface
UniMiniProgramPluginOptions
{
cdn
?:
number
...
...
@@ -107,7 +107,8 @@ export function uniMiniProgramPlugin(
let
resolvedConfig
:
ResolvedConfig
rewriteCompileScript
()
rewriteCompileScriptOnce
()
rewriteCompilerSfcParseOnce
()
return
{
name
:
'
uni:mp
'
,
...
...
@@ -192,18 +193,3 @@ export function uniMiniProgramPlugin(
},
}
}
function
rewriteCompileScript
()
{
const
compiler
=
require
(
resolveBuiltIn
(
'
@vue/compiler-sfc
'
))
const
{
compileScript
}
=
compiler
compiler
.
compileScript
=
(
sfc
:
SFCDescriptor
,
options
:
SFCScriptCompileOptions
):
SFCScriptBlock
=>
{
if
(
options
?.
templateOptions
?.
compilerOptions
)
{
;(
options
.
templateOptions
.
compilerOptions
as
any
).
bindingCssVars
=
sfc
.
cssVars
||
[]
}
return
compileScript
(
sfc
,
options
)
}
}
packages/uni-mp-vite/src/plugin/polyfill.ts
0 → 100644
浏览文件 @
ec468f85
import
{
extend
}
from
'
@vue/shared
'
import
{
once
}
from
'
@dcloudio/uni-shared
'
import
{
resolveBuiltIn
}
from
'
@dcloudio/uni-cli-shared
'
import
{
SFCDescriptor
,
SFCParseOptions
,
SFCParseResult
,
SFCScriptBlock
,
SFCScriptCompileOptions
,
}
from
'
@vue/compiler-sfc
'
export
const
rewriteCompileScriptOnce
=
once
(
rewriteCompileScript
)
export
const
rewriteCompilerSfcParseOnce
=
once
(
rewriteCompilerSfcParse
)
function
rewriteCompileScript
()
{
const
compiler
=
require
(
resolveBuiltIn
(
'
@vue/compiler-sfc
'
))
const
{
compileScript
}
=
compiler
compiler
.
compileScript
=
(
sfc
:
SFCDescriptor
,
options
:
SFCScriptCompileOptions
):
SFCScriptBlock
=>
{
if
(
options
?.
templateOptions
?.
compilerOptions
)
{
;(
options
.
templateOptions
.
compilerOptions
as
any
).
bindingCssVars
=
sfc
.
cssVars
||
[]
}
return
compileScript
(
sfc
,
options
)
}
}
/**
* 重写 parse,解决相同内容被缓存,未触发 template 编译的问题
*/
function
rewriteCompilerSfcParse
()
{
// @ts-ignore
const
compilerSfc
=
require
(
resolveBuiltIn
(
'
@vue/compiler-sfc
'
))
const
{
parse
}
=
compilerSfc
compilerSfc
.
parse
=
(
source
:
string
,
options
:
SFCParseOptions
):
SFCParseResult
=>
{
const
res
=
parse
(
source
,
options
)
as
SFCParseResult
// template 中,先<view>hello</view>,然后修改为<view></view>,再恢复为<view>hello</view>,
// 此时因为 descriptor 被缓存,不会触发 compileTemplate,故 parse 时,每次生成一个全新的 descriptor
// https://github.com/vitejs/vite/blob/v2.9.13/packages/plugin-vue/src/script.ts#L44
// https://github.com/dcloudio/uni-app/issues/3685
res
.
descriptor
=
extend
({},
res
.
descriptor
)
return
res
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录