Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
ced10acc
U
uni-app
项目概览
DCloud
/
uni-app
2 个月 前同步成功
通知
717
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ced10acc
编写于
6月 10, 2021
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
wip: uni-h5-vite
上级
80394f20
变更
21
展开全部
隐藏空白更改
内联
并排
Showing
21 changed file
with
648 addition
and
825 deletion
+648
-825
packages/size-check/vite.config.ts
packages/size-check/vite.config.ts
+1
-0
packages/uni-cli-shared/package.json
packages/uni-cli-shared/package.json
+2
-0
packages/uni-cli-shared/src/constants.ts
packages/uni-cli-shared/src/constants.ts
+13
-0
packages/uni-cli-shared/src/index.ts
packages/uni-cli-shared/src/index.ts
+0
-1
packages/uni-cli-shared/src/vite/index.ts
packages/uni-cli-shared/src/vite/index.ts
+1
-0
packages/uni-cli-shared/src/vite/plugins/index.ts
packages/uni-cli-shared/src/vite/plugins/index.ts
+1
-0
packages/uni-cli-shared/src/vite/plugins/inject.ts
packages/uni-cli-shared/src/vite/plugins/inject.ts
+8
-13
packages/uni-cli-shared/src/vite/utils/ast.ts
packages/uni-cli-shared/src/vite/utils/ast.ts
+89
-0
packages/uni-cli-shared/src/vite/utils/index.ts
packages/uni-cli-shared/src/vite/utils/index.ts
+3
-0
packages/uni-cli-shared/src/vite/utils/url.ts
packages/uni-cli-shared/src/vite/utils/url.ts
+0
-0
packages/uni-cloud/lib/uni.plugin.js
packages/uni-cloud/lib/uni.plugin.js
+2
-2
packages/uni-h5-vite/dist/index.js
packages/uni-h5-vite/dist/index.js
+2
-0
packages/uni-h5-vite/dist/plugins/inject.js
packages/uni-h5-vite/dist/plugins/inject.js
+48
-0
packages/uni-h5-vite/src/index.ts
packages/uni-h5-vite/src/index.ts
+2
-0
packages/uni-h5-vite/src/plugins/inject.ts
packages/uni-h5-vite/src/plugins/inject.ts
+58
-0
packages/vite-plugin-uni/package.json
packages/vite-plugin-uni/package.json
+0
-1
packages/vite-plugin-uni/src/configResolved/plugins/index.ts
packages/vite-plugin-uni/src/configResolved/plugins/index.ts
+1
-63
packages/vite-plugin-uni/src/configResolved/plugins/pagesJson.ts
...s/vite-plugin-uni/src/configResolved/plugins/pagesJson.ts
+0
-325
packages/vite-plugin-uni/src/index.ts
packages/vite-plugin-uni/src/index.ts
+0
-2
scripts/utils.js
scripts/utils.js
+1
-0
yarn.lock
yarn.lock
+416
-418
未找到文件。
packages/size-check/vite.config.ts
浏览文件 @
ced10acc
...
...
@@ -3,6 +3,7 @@ import uniH5VitePlugins from '@dcloudio/uni-h5-vite'
import
uni
from
'
@dcloudio/vite-plugin-uni
'
process
.
env
.
UNI_CLI_CONTEXT
=
__dirname
process
.
env
.
UNI_INPUT_DIR
=
path
.
resolve
(
__dirname
,
'
src
'
)
/**
* @type {import('vite').UserConfig}
*/
...
...
packages/uni-cli-shared/package.json
浏览文件 @
ced10acc
...
...
@@ -22,7 +22,9 @@
"url"
:
"https://github.com/dcloudio/uni-app/issues"
},
"dependencies"
:
{
"@rollup/pluginutils"
:
"^4.1.0"
,
"debug"
:
"^4.3.1"
,
"estree-walker"
:
"^2.0.2"
,
"jsonc-parser"
:
"^3.0.0"
,
"slash"
:
"^3.0.0"
,
"tapable"
:
"^2.2.0"
,
...
...
packages/uni-cli-shared/src/constants.ts
浏览文件 @
ced10acc
...
...
@@ -7,3 +7,16 @@ export const H5_API_STYLE_PATH = '@dcloudio/uni-h5/style/api/'
export
const
H5_FRAMEWORK_STYLE_PATH
=
'
@dcloudio/uni-h5/style/framework/
'
export
const
H5_COMPONENTS_STYLE_PATH
=
'
@dcloudio/uni-h5/style/
'
export
const
BASE_COMPONENTS_STYLE_PATH
=
'
@dcloudio/uni-components/style/
'
export
const
COMMON_EXCLUDE
=
[
/pages
\.
json
\.
js$/
,
/manifest
\.
json
\.
js$/
,
/vite
\/
/
,
/
\/
@vue
\/
/
,
/
\/
vue-router
\/
/
,
/
\/
vuex
\/
/
,
/@dcloudio
\/
uni-h5-vue/
,
/@dcloudio
\/
uni-shared/
,
/@dcloudio
\/
uni-h5
\/
style/
,
/@dcloudio
\/
uni-components
\/
style/
,
]
packages/uni-cli-shared/src/index.ts
浏览文件 @
ced10acc
export
*
from
'
./ssr
'
export
*
from
'
./url
'
export
*
from
'
./deps
'
export
*
from
'
./json
'
export
*
from
'
./vite
'
...
...
packages/uni-cli-shared/src/vite/index.ts
浏览文件 @
ced10acc
...
...
@@ -6,4 +6,5 @@ export interface UniVitePlugin extends Plugin {
}
export
*
from
'
./utils
'
export
*
from
'
./plugins
'
export
*
from
'
./features
'
packages/uni-cli-shared/src/vite/plugins/index.ts
0 → 100644
浏览文件 @
ced10acc
export
*
from
'
./inject
'
packages/
vite-plugin-uni/src/configResolved
/plugins/inject.ts
→
packages/
uni-cli-shared/src/vite
/plugins/inject.ts
浏览文件 @
ced10acc
...
...
@@ -16,15 +16,14 @@ import { walk } from 'estree-walker'
import
{
extend
}
from
'
@vue/shared
'
import
{
MagicString
}
from
'
@vue/compiler-sfc
'
import
{
EXTNAME_JS
,
EXTNAME_VUE
}
from
'
../../constants
'
import
{
EXTNAME_JS
,
EXTNAME_VUE
,
isProperty
,
isReference
,
isMemberExpression
,
parseVueRequest
,
}
from
'
@dcloudio/uni-cli-shared
'
import
{
UniPluginFilterOptions
}
from
'
.
'
import
{
isProperty
,
isReference
,
isMemberExpression
}
from
'
../../utils
'
}
from
'
../utils
'
interface
Scope
{
parent
:
Scope
...
...
@@ -38,17 +37,13 @@ export interface InjectOptions {
callback
?:
(
imports
:
Map
<
any
,
any
>
,
mod
:
[
string
,
string
])
=>
void
include
?:
FilterPattern
exclude
?:
FilterPattern
[
str
:
string
]:
|
Injectment
|
UniPluginFilterOptions
[
'
include
'
]
|
Boolean
|
Function
[
str
:
string
]:
Injectment
|
FilterPattern
|
Boolean
|
Function
|
undefined
}
const
debugInject
=
debug
(
'
vite:uni:inject
'
)
const
debugInjectTry
=
debug
(
'
vite:uni:inject-try
'
)
export
function
uniInjectPlugin
(
options
:
InjectOptions
):
Plugin
{
export
function
uni
Vite
InjectPlugin
(
options
:
InjectOptions
):
Plugin
{
if
(
!
options
)
throw
new
Error
(
'
Missing options
'
)
const
filter
=
createFilter
(
options
.
include
,
options
.
exclude
)
...
...
packages/uni-cli-shared/src/vite/utils/ast.ts
0 → 100644
浏览文件 @
ced10acc
import
{
Literal
,
BaseNode
,
Property
,
Identifier
,
CallExpression
,
MemberExpression
,
MethodDefinition
,
ExportSpecifier
,
}
from
'
estree
'
import
{
Node
,
TextModes
,
NodeTypes
,
ElementNode
,
DirectiveNode
,
SimpleExpressionNode
,
}
from
'
@vue/compiler-core
'
import
{
parse
}
from
'
@vue/compiler-dom
'
export
const
isProperty
=
(
node
:
BaseNode
):
node
is
Property
=>
node
.
type
===
'
Property
'
export
const
isIdentifier
=
(
node
:
BaseNode
):
node
is
Identifier
=>
node
.
type
===
'
Identifier
'
export
const
isCallExpression
=
(
node
:
BaseNode
):
node
is
CallExpression
=>
node
.
type
===
'
CallExpression
'
export
const
isMemberExpression
=
(
node
:
BaseNode
):
node
is
MemberExpression
=>
node
.
type
===
'
MemberExpression
'
export
const
isMethodDefinition
=
(
node
:
BaseNode
):
node
is
MethodDefinition
=>
node
.
type
===
'
MethodDefinition
'
export
const
isExportSpecifier
=
(
node
:
BaseNode
):
node
is
ExportSpecifier
=>
node
.
type
===
'
ExportSpecifier
'
export
const
isReference
=
(
node
:
BaseNode
,
parent
:
BaseNode
):
boolean
=>
{
if
(
isMemberExpression
(
node
))
{
return
!
node
.
computed
&&
isReference
(
node
.
object
,
node
)
}
if
(
isIdentifier
(
node
))
{
if
(
isMemberExpression
(
parent
))
return
parent
.
computed
||
node
===
parent
.
object
// `bar` in { bar: foo }
if
(
isProperty
(
parent
)
&&
node
!==
parent
.
value
)
return
false
// `bar` in `class Foo { bar () {...} }`
if
(
isMethodDefinition
(
parent
))
return
false
// `bar` in `export { foo as bar }`
if
(
isExportSpecifier
(
parent
)
&&
node
!==
parent
.
local
)
return
false
return
true
}
return
false
}
export
function
createLiteral
(
value
:
string
)
{
return
{
type
:
'
Literal
'
,
value
,
raw
:
`'
${
value
}
'`
,
}
as
Literal
}
export
function
parseVue
(
code
:
string
,
errors
:
SyntaxError
[])
{
return
parse
(
code
,
{
isNativeTag
:
()
=>
true
,
isPreTag
:
()
=>
true
,
getTextMode
:
()
=>
TextModes
.
DATA
,
onError
:
(
e
)
=>
{
errors
.
push
(
e
)
},
})
}
export
function
isElementNode
(
node
:
Node
):
node
is
ElementNode
{
return
node
.
type
===
NodeTypes
.
ELEMENT
}
export
function
isDirectiveNode
(
node
:
Node
):
node
is
DirectiveNode
{
return
node
.
type
===
NodeTypes
.
DIRECTIVE
}
export
function
isSimpleExpressionNode
(
node
:
Node
):
node
is
SimpleExpressionNode
{
return
node
.
type
===
NodeTypes
.
SIMPLE_EXPRESSION
}
packages/uni-cli-shared/src/vite/utils.ts
→
packages/uni-cli-shared/src/vite/utils
/index
.ts
浏览文件 @
ced10acc
import
{
ResolvedConfig
}
from
'
vite
'
export
*
from
'
./ast
'
export
*
from
'
./url
'
// 内置组件css列表,h5平台需要合并进去首页css中
export
const
buildInCssSet
=
new
Set
<
string
>
()
...
...
packages/uni-cli-shared/src/url.ts
→
packages/uni-cli-shared/src/
vite/utils/
url.ts
浏览文件 @
ced10acc
文件已移动
packages/uni-cloud/lib/uni.plugin.js
浏览文件 @
ced10acc
const
{
once
}
=
require
(
'
@dcloudio/uni-shared
'
)
const
{
uni
InjectPlugin
}
=
require
(
'
@dcloudio/vite-plugin-uni
'
)
const
{
uni
ViteInjectPlugin
}
=
require
(
'
@dcloudio/uni-cli-shared
'
)
/**
* @type {import('vite').Plugin}
*/
...
...
@@ -108,7 +108,7 @@ function initUniCloudEnv(config) {
module
.
exports
=
[
UniCloudPlugin
,
uniInjectPlugin
({
uni
Vite
InjectPlugin
({
uniCloud
:
[
'
@dcloudio/uni-cloud
'
,
'
default
'
],
}),
]
packages/uni-h5-vite/dist/index.js
浏览文件 @
ced10acc
...
...
@@ -2,6 +2,7 @@
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
const
css_1
=
require
(
"
./plugins/css
"
);
const
cssScoped_1
=
require
(
"
./plugins/cssScoped
"
);
const
inject_1
=
require
(
"
./plugins/inject
"
);
const
mainJs_1
=
require
(
"
./plugins/mainJs
"
);
const
manifestJson_1
=
require
(
"
./plugins/manifestJson
"
);
const
pagesJson_1
=
require
(
"
./plugins/pagesJson
"
);
...
...
@@ -20,6 +21,7 @@ exports.default = [
mainJs_1
.
uniMainJsPlugin
(),
manifestJson_1
.
uniManifestJsonPlugin
(),
pagesJson_1
.
uniPagesJsonPlugin
(),
inject_1
.
uniInjectPlugin
(),
css_1
.
uniCssPlugin
(),
UniH5Plugin
,
];
packages/uni-h5-vite/dist/plugins/inject.js
0 → 100644
浏览文件 @
ced10acc
"
use strict
"
;
Object
.
defineProperty
(
exports
,
"
__esModule
"
,
{
value
:
true
});
exports
.
uniInjectPlugin
=
void
0
;
const
shared_1
=
require
(
"
@vue/shared
"
);
const
uni_cli_shared_1
=
require
(
"
@dcloudio/uni-cli-shared
"
);
const
uniInjectPluginOptions
=
{
exclude
:
[...
uni_cli_shared_1
.
COMMON_EXCLUDE
],
'
uni.
'
:
'
@dcloudio/uni-h5
'
,
getApp
:
[
'
@dcloudio/uni-h5
'
,
'
getApp
'
],
getCurrentPages
:
[
'
@dcloudio/uni-h5
'
,
'
getCurrentPages
'
],
UniServiceJSBridge
:
[
'
@dcloudio/uni-h5
'
,
'
UniServiceJSBridge
'
],
UniViewJSBridge
:
[
'
@dcloudio/uni-h5
'
,
'
UniViewJSBridge
'
],
};
function
uniInjectPlugin
()
{
let
resolvedConfig
;
const
callback
=
function
(
imports
,
mod
)
{
const
styles
=
mod
[
0
]
===
'
@dcloudio/uni-h5
'
&&
uni_cli_shared_1
.
API_DEPS_CSS
[
mod
[
1
]];
if
(
!
styles
)
{
return
;
}
styles
.
forEach
((
style
)
=>
{
if
(
uni_cli_shared_1
.
isCombineBuiltInCss
(
resolvedConfig
))
{
uni_cli_shared_1
.
buildInCssSet
.
add
(
style
);
}
else
{
if
(
!
imports
.
has
(
style
))
{
imports
.
set
(
style
,
`import '
${
style
}
';`
);
}
}
});
};
const
injectPlugin
=
uni_cli_shared_1
.
uniViteInjectPlugin
(
shared_1
.
extend
(
uniInjectPluginOptions
,
{
callback
,
}));
return
{
name
:
'
vite:uni-h5-inject
'
,
apply
:
'
build
'
,
enforce
:
'
post
'
,
configResolved
(
config
)
{
resolvedConfig
=
config
;
},
transform
(
code
,
id
)
{
return
injectPlugin
.
transform
.
call
(
this
,
code
,
id
);
},
};
}
exports
.
uniInjectPlugin
=
uniInjectPlugin
;
packages/uni-h5-vite/src/index.ts
浏览文件 @
ced10acc
import
{
UniVitePlugin
}
from
'
@dcloudio/uni-cli-shared
'
import
{
uniCssPlugin
}
from
'
./plugins/css
'
import
{
uniCssScopedPlugin
}
from
'
./plugins/cssScoped
'
import
{
uniInjectPlugin
}
from
'
./plugins/inject
'
import
{
uniMainJsPlugin
}
from
'
./plugins/mainJs
'
import
{
uniManifestJsonPlugin
}
from
'
./plugins/manifestJson
'
import
{
uniPagesJsonPlugin
}
from
'
./plugins/pagesJson
'
...
...
@@ -21,6 +22,7 @@ export default [
uniMainJsPlugin
(),
uniManifestJsonPlugin
(),
uniPagesJsonPlugin
(),
uniInjectPlugin
(),
uniCssPlugin
(),
UniH5Plugin
,
]
packages/uni-h5-vite/src/plugins/inject.ts
0 → 100644
浏览文件 @
ced10acc
import
{
Plugin
,
ResolvedConfig
}
from
'
vite
'
import
{
extend
}
from
'
@vue/shared
'
import
{
API_DEPS_CSS
,
COMMON_EXCLUDE
,
InjectOptions
,
buildInCssSet
,
uniViteInjectPlugin
,
isCombineBuiltInCss
,
}
from
'
@dcloudio/uni-cli-shared
'
const
uniInjectPluginOptions
:
Partial
<
InjectOptions
>
=
{
exclude
:
[...
COMMON_EXCLUDE
],
'
uni.
'
:
'
@dcloudio/uni-h5
'
,
getApp
:
[
'
@dcloudio/uni-h5
'
,
'
getApp
'
],
getCurrentPages
:
[
'
@dcloudio/uni-h5
'
,
'
getCurrentPages
'
],
UniServiceJSBridge
:
[
'
@dcloudio/uni-h5
'
,
'
UniServiceJSBridge
'
],
UniViewJSBridge
:
[
'
@dcloudio/uni-h5
'
,
'
UniViewJSBridge
'
],
}
export
function
uniInjectPlugin
():
Plugin
{
let
resolvedConfig
:
ResolvedConfig
const
callback
:
InjectOptions
[
'
callback
'
]
=
function
(
imports
,
mod
)
{
const
styles
=
mod
[
0
]
===
'
@dcloudio/uni-h5
'
&&
API_DEPS_CSS
[
mod
[
1
]
as
keyof
typeof
API_DEPS_CSS
]
if
(
!
styles
)
{
return
}
styles
.
forEach
((
style
)
=>
{
if
(
isCombineBuiltInCss
(
resolvedConfig
))
{
buildInCssSet
.
add
(
style
)
}
else
{
if
(
!
imports
.
has
(
style
))
{
imports
.
set
(
style
,
`import '
${
style
}
';`
)
}
}
})
}
const
injectPlugin
=
uniViteInjectPlugin
(
extend
(
uniInjectPluginOptions
,
{
callback
,
})
)
return
{
name
:
'
vite:uni-h5-inject
'
,
apply
:
'
build
'
,
enforce
:
'
post
'
,
configResolved
(
config
)
{
resolvedConfig
=
config
},
transform
(
code
,
id
)
{
return
injectPlugin
.
transform
!
.
call
(
this
,
code
,
id
)
},
}
}
packages/vite-plugin-uni/package.json
浏览文件 @
ced10acc
...
...
@@ -30,7 +30,6 @@
"cac"
:
"^6.7.3"
,
"chalk"
:
"^4.1.1"
,
"debug"
:
"^4.3.1"
,
"estree-walker"
:
"^2.0.1"
,
"express"
:
"^4.17.1"
,
"fs-extra"
:
"^9.0.1"
,
"jsonc-parser"
:
"^3.0.0"
,
...
...
packages/vite-plugin-uni/src/configResolved/plugins/index.ts
浏览文件 @
ced10acc
...
...
@@ -4,18 +4,13 @@ import { Plugin, ResolvedConfig } from 'vite'
import
{
FilterPattern
}
from
'
@rollup/pluginutils
'
import
vue
from
'
@vitejs/plugin-vue
'
import
{
API_DEPS_CSS
,
buildInCssSet
,
isCombineBuiltInCss
,
}
from
'
@dcloudio/uni-cli-shared
'
import
{
COMMON_EXCLUDE
}
from
'
@dcloudio/uni-cli-shared
'
import
{
VitePluginUniResolvedOptions
}
from
'
../..
'
import
{
uniPrePlugin
}
from
'
./pre
'
import
{
uniJsonPlugin
}
from
'
./json
'
import
{
uniPreCssPlugin
}
from
'
./preCss
'
import
{
uniEasycomPlugin
}
from
'
./easycom
'
import
{
InjectOptions
,
uniInjectPlugin
}
from
'
./inject
'
import
{
uniPageVuePlugin
}
from
'
./pageVue
'
import
{
uniCopyPlugin
}
from
'
./copy
'
...
...
@@ -34,18 +29,6 @@ export interface UniPluginFilterOptions extends VitePluginUniResolvedOptions {
const
UNI_H5_RE
=
/@dcloudio
\/
uni-h5/
const
COMMON_EXCLUDE
=
[
/pages
\.
json
\.
js$/
,
/manifest
\.
json
\.
js$/
,
/vite
\/
/
,
/
\/
@vue
\/
/
,
/
\/
vue-router
\/
/
,
/
\/
vuex
\/
/
,
/@dcloudio
\/
uni-h5-vue/
,
/@dcloudio
\/
uni-shared/
,
/@dcloudio
\/
uni-components
\/
style/
,
]
const
APP_VUE_RE
=
/App.vue$/
const
uniPrePluginOptions
:
Partial
<
UniPluginFilterOptions
>
=
{
...
...
@@ -59,38 +42,6 @@ const uniEasycomPluginOptions: Partial<UniPluginFilterOptions> = {
exclude
:
[
APP_VUE_RE
,
UNI_H5_RE
],
}
const
uniInjectPluginOptions
:
Partial
<
InjectOptions
>
=
{
exclude
:
[...
COMMON_EXCLUDE
],
'
uni.
'
:
'
@dcloudio/uni-h5
'
,
getApp
:
[
'
@dcloudio/uni-h5
'
,
'
getApp
'
],
getCurrentPages
:
[
'
@dcloudio/uni-h5
'
,
'
getCurrentPages
'
],
UniServiceJSBridge
:
[
'
@dcloudio/uni-h5
'
,
'
UniServiceJSBridge
'
],
UniViewJSBridge
:
[
'
@dcloudio/uni-h5
'
,
'
UniViewJSBridge
'
],
}
function
createUniInjectCallback
(
config
:
ResolvedConfig
):
InjectOptions
[
'
callback
'
]
{
const
needCombineBuiltInCss
=
isCombineBuiltInCss
(
config
)
return
(
imports
,
mod
)
=>
{
const
styles
=
mod
[
0
]
===
'
@dcloudio/uni-h5
'
&&
API_DEPS_CSS
[
mod
[
1
]
as
keyof
typeof
API_DEPS_CSS
]
if
(
!
styles
)
{
return
}
styles
.
forEach
((
style
)
=>
{
if
(
needCombineBuiltInCss
)
{
buildInCssSet
.
add
(
style
)
}
else
{
if
(
!
imports
.
has
(
style
))
{
imports
.
set
(
style
,
`import '
${
style
}
';`
)
}
}
})
}
}
export
function
initPlugins
(
config
:
ResolvedConfig
,
options
:
VitePluginUniResolvedOptions
...
...
@@ -116,19 +67,6 @@ export function initPlugins(
addPlugin
(
plugins
,
uniPreVuePlugin
(),
'
vite:vue
'
,
'
pre
'
)
addPlugin
(
plugins
,
uniRenderjsPlugin
(),
'
vite:vue
'
)
// 可以考虑使用apply:'build'
if
(
command
===
'
build
'
)
{
addPlugin
(
plugins
,
uniInjectPlugin
(
extend
(
uniInjectPluginOptions
,
{
callback
:
createUniInjectCallback
(
config
),
})
),
'
vite:vue
'
)
}
addPlugin
(
plugins
,
uniSSRPlugin
(
config
,
extend
({
exclude
:
[...
COMMON_EXCLUDE
]
},
options
)),
...
...
packages/vite-plugin-uni/src/configResolved/plugins/pagesJson.ts
已删除
100644 → 0
浏览文件 @
80394f20
import
fs
from
'
fs
'
import
path
from
'
path
'
import
slash
from
'
slash
'
import
{
Plugin
,
ResolvedConfig
}
from
'
vite
'
import
{
extend
,
camelize
,
capitalize
}
from
'
@vue/shared
'
import
{
H5_FRAMEWORK_STYLE_PATH
,
BASE_COMPONENTS_STYLE_PATH
,
normalizePagesJson
,
API_DEPS_CSS
,
}
from
'
@dcloudio/uni-cli-shared
'
import
{
VitePluginUniResolvedOptions
}
from
'
../..
'
import
{
FEATURE_DEFINES
}
from
'
../../utils
'
const
pkg
=
require
(
'
@dcloudio/vite-plugin-uni/package.json
'
)
const
PAGES_JSON_JS
=
'
pages.json.js
'
export
function
uniPagesJsonPlugin
(
config
:
ResolvedConfig
,
options
:
VitePluginUniResolvedOptions
):
Plugin
{
const
pagesJsonPath
=
slash
(
path
.
join
(
options
.
inputDir
,
'
pages.json
'
))
return
{
name
:
'
vite:uni-pages-json
'
,
resolveId
(
id
)
{
if
(
id
.
endsWith
(
PAGES_JSON_JS
))
{
return
pagesJsonPath
+
'
.js
'
}
},
transform
(
code
,
id
,
ssr
)
{
if
(
id
.
endsWith
(
PAGES_JSON_JS
))
{
return
{
code
:
(
options
.
command
===
'
serve
'
||
(
options
.
command
===
'
build
'
&&
ssr
)
?
registerGlobalCode
(
config
,
ssr
)
:
''
)
+
generatePagesJsonCode
(
ssr
,
code
,
config
,
options
),
map
:
{
mappings
:
''
},
}
}
},
load
(
id
)
{
if
(
id
.
endsWith
(
PAGES_JSON_JS
))
{
return
fs
.
readFileSync
(
pagesJsonPath
,
'
utf8
'
)
}
},
}
}
interface
PageRouteOptions
{
name
:
string
path
:
string
meta
:
Partial
<
UniApp
.
PageRouteMeta
>
}
function
generatePagesJsonCode
(
ssr
:
boolean
|
undefined
,
jsonStr
:
string
,
config
:
ResolvedConfig
,
options
:
VitePluginUniResolvedOptions
)
{
const
globalName
=
getGlobal
(
ssr
)
const
pagesJson
=
normalizePagesJson
(
jsonStr
,
options
.
inputDir
,
options
.
platform
)
const
{
importLayoutComponentsCode
,
defineLayoutComponentsCode
}
=
generateLayoutComponentsCode
(
globalName
,
pagesJson
)
const
definePagesCode
=
generatePagesDefineCode
(
pagesJson
,
config
)
const
uniRoutesCode
=
generateRoutes
(
globalName
,
pagesJson
,
config
,
options
)
const
uniConfigCode
=
generateConfig
(
globalName
,
pagesJson
,
options
)
const
manifestJsonPath
=
slash
(
path
.
resolve
(
options
.
inputDir
,
'
manifest.json.js
'
)
)
const
cssCode
=
generateCssCode
(
config
,
options
)
return
`
import { defineAsyncComponent, resolveComponent, createVNode, withCtx, openBlock, createBlock } from 'vue'
import { PageComponent, AsyncLoadingComponent, AsyncErrorComponent } from '@dcloudio/uni-h5'
import { appid, debug, networkTimeout, router, async, sdkConfigs, qqMapKey, nvue } from '
${
manifestJsonPath
}
'
${
importLayoutComponentsCode
}
const extend = Object.assign
${
cssCode
}
${
uniConfigCode
}
${
defineLayoutComponentsCode
}
${
definePagesCode
}
${
uniRoutesCode
}
${
options
.
command
===
'
serve
'
?
hmrCode
:
''
}
export {}
`
}
const
hmrCode
=
`if(import.meta.hot){
import.meta.hot.on('invalidate', (data) => {
import.meta.hot.invalidate()
})
}`
function
getGlobal
(
ssr
?:
boolean
)
{
return
ssr
?
'
global
'
:
'
window
'
}
function
registerGlobalCode
(
config
:
ResolvedConfig
,
ssr
?:
boolean
)
{
const
name
=
getGlobal
(
ssr
)
const
rpx2pxCode
=
!
ssr
&&
config
.
define
!
.
__UNI_FEATURE_RPX__
?
`import {upx2px} from '@dcloudio/uni-h5'
${
name
}
.rpx2px = upx2px
`
:
''
return
`
${
rpx2pxCode
}
import {uni,getCurrentPages,getApp,UniServiceJSBridge,UniViewJSBridge} from '@dcloudio/uni-h5'
${
name
}
.getApp = getApp
${
name
}
.getCurrentPages = getCurrentPages
${
name
}
.uni = uni
${
name
}
.UniViewJSBridge = UniViewJSBridge
${
name
}
.UniServiceJSBridge = UniServiceJSBridge
`
}
function
normalizePageIdentifier
(
path
:
string
)
{
return
capitalize
(
camelize
(
path
.
replace
(
/
\/
/g
,
'
-
'
)))
}
function
generateCssCode
(
config
:
ResolvedConfig
,
options
:
VitePluginUniResolvedOptions
)
{
const
define
=
config
.
define
!
as
FEATURE_DEFINES
const
cssFiles
=
[
H5_FRAMEWORK_STYLE_PATH
+
'
base.css
'
]
// if (define.__UNI_FEATURE_PAGES__) {
cssFiles
.
push
(
H5_FRAMEWORK_STYLE_PATH
+
'
async.css
'
)
// }
if
(
define
.
__UNI_FEATURE_RESPONSIVE__
)
{
cssFiles
.
push
(
H5_FRAMEWORK_STYLE_PATH
+
'
layout.css
'
)
}
if
(
define
.
__UNI_FEATURE_NAVIGATIONBAR__
)
{
cssFiles
.
push
(
H5_FRAMEWORK_STYLE_PATH
+
'
pageHead.css
'
)
}
if
(
define
.
__UNI_FEATURE_TABBAR__
)
{
cssFiles
.
push
(
H5_FRAMEWORK_STYLE_PATH
+
'
tabBar.css
'
)
}
if
(
define
.
__UNI_FEATURE_NVUE__
)
{
cssFiles
.
push
(
H5_FRAMEWORK_STYLE_PATH
+
'
nvue.css
'
)
}
if
(
define
.
__UNI_FEATURE_PULL_DOWN_REFRESH__
)
{
cssFiles
.
push
(
H5_FRAMEWORK_STYLE_PATH
+
'
pageRefresh.css
'
)
}
if
(
define
.
__UNI_FEATURE_NAVIGATIONBAR_SEARCHINPUT__
)
{
cssFiles
.
push
(
BASE_COMPONENTS_STYLE_PATH
+
'
input.css
'
)
}
if
(
options
.
command
===
'
serve
'
)
{
// 开发模式,自动添加所有API相关css
Object
.
keys
(
API_DEPS_CSS
).
forEach
((
name
)
=>
{
const
styles
=
API_DEPS_CSS
[
name
as
keyof
typeof
API_DEPS_CSS
]
styles
.
forEach
((
style
)
=>
{
if
(
!
cssFiles
.
includes
(
style
))
{
cssFiles
.
push
(
style
)
}
})
})
}
return
cssFiles
.
map
((
file
)
=>
`import '
${
file
}
'`
).
join
(
'
\n
'
)
}
function
generateLayoutComponentsCode
(
globalName
:
string
,
pagesJson
:
UniApp
.
PagesJson
)
{
const
windowNames
:
Array
<
'
topWindow
'
|
'
leftWindow
'
|
'
rightWindow
'
>
=
[
'
topWindow
'
,
'
leftWindow
'
,
'
rightWindow
'
,
]
let
importLayoutComponentsCode
=
''
let
defineLayoutComponentsCode
=
`
${
globalName
}
.__uniLayout =
${
globalName
}
.__uniLayout || {}\n`
windowNames
.
forEach
((
name
)
=>
{
const
windowConfig
=
pagesJson
[
name
]
if
(
windowConfig
&&
windowConfig
.
path
)
{
importLayoutComponentsCode
+=
`import
${
name
}
from './
${
windowConfig
.
path
}
'\n`
defineLayoutComponentsCode
+=
`
${
globalName
}
.__uniConfig.
${
name
}
.component =
${
name
}
\n`
}
})
return
{
importLayoutComponentsCode
,
defineLayoutComponentsCode
,
}
}
function
generatePageDefineCode
(
pageOptions
:
UniApp
.
PagesJsonPageOptions
)
{
const
pageIdent
=
normalizePageIdentifier
(
pageOptions
.
path
)
return
`const
${
pageIdent
}
Loader = ()=>import('./
${
pageOptions
.
path
}
?mpType=page')
const
${
pageIdent
}
= defineAsyncComponent(extend({loader:
${
pageIdent
}
Loader},AsyncComponentOptions))`
}
function
generatePagesDefineCode
(
pagesJson
:
UniApp
.
PagesJson
,
_config
:
ResolvedConfig
)
{
// const define = config.define! as FEATURE_DEFINES
// if (!define.__UNI_FEATURE_PAGES__) {
// // single page
// const pagePath = pagesJson.pages[0].path
// return `import ${normalizePageIdentifier(
// pagePath
// )} from './${pagePath}.vue?mpType=page'`
// }
const
{
pages
}
=
pagesJson
return
(
`const AsyncComponentOptions = {
loadingComponent: AsyncLoadingComponent,
errorComponent: AsyncErrorComponent,
delay: async.delay,
timeout: async.timeout,
suspensible: async.suspensible
}
`
+
pages
.
map
((
pageOptions
)
=>
generatePageDefineCode
(
pageOptions
)).
join
(
'
\n
'
)
)
}
function
normalizePagesRoute
(
pagesJson
:
UniApp
.
PagesJson
,
options
:
VitePluginUniResolvedOptions
):
PageRouteOptions
[]
{
const
firstPagePath
=
pagesJson
.
pages
[
0
].
path
const
tabBarList
=
(
pagesJson
.
tabBar
&&
pagesJson
.
tabBar
.
list
)
||
[]
return
pagesJson
.
pages
.
map
((
pageOptions
)
=>
{
const
pagePath
=
pageOptions
.
path
const
name
=
normalizePageIdentifier
(
pagePath
)
const
isEntry
=
firstPagePath
===
pagePath
?
true
:
undefined
const
tabBarIndex
=
tabBarList
.
findIndex
(
(
tabBarPage
:
{
pagePath
:
string
})
=>
tabBarPage
.
pagePath
===
pagePath
)
const
isTabBar
=
tabBarIndex
!==
-
1
?
true
:
undefined
const
isNVue
=
fs
.
existsSync
(
path
.
join
(
options
.
inputDir
,
pagePath
+
'
.nvue
'
)
)
let
windowTop
=
0
const
meta
=
extend
(
{
route
:
pageOptions
.
path
,
isNVue
:
isNVue
?
true
:
undefined
,
isQuit
:
isEntry
||
isTabBar
?
true
:
undefined
,
isEntry
,
isTabBar
,
tabBarIndex
,
windowTop
,
},
pageOptions
.
style
)
return
{
name
,
path
:
pageOptions
.
path
,
meta
,
}
})
}
function
generatePageRoute
(
{
name
,
path
,
meta
}:
PageRouteOptions
,
config
:
ResolvedConfig
)
{
const
{
isEntry
}
=
meta
const
alias
=
isEntry
?
`\n alias:'/
${
path
}
',`
:
''
return
`{
path:'/
${
isEntry
?
''
:
path
}
',
${
alias
}
component:{setup(){return ()=>renderPage(
${
name
}
)}},
loader:
${
normalizePageIdentifier
(
path
)}
Loader,
meta:
${
JSON
.
stringify
(
meta
)}
}`
}
function
generatePagesRoute
(
pagesRouteOptions
:
PageRouteOptions
[],
config
:
ResolvedConfig
)
{
return
pagesRouteOptions
.
map
((
pageOptions
)
=>
generatePageRoute
(
pageOptions
,
config
)
)
}
function
generateRoutes
(
globalName
:
string
,
pagesJson
:
UniApp
.
PagesJson
,
config
:
ResolvedConfig
,
options
:
VitePluginUniResolvedOptions
)
{
return
`
function renderPage(component){
return (openBlock(), createBlock(PageComponent, null, {page: withCtx(() => [createVNode(component, { ref: "page" }, null, 512 /* NEED_PATCH */)]), _: 1 /* STABLE */}))
}
${
globalName
}
.__uniRoutes=[
${[
...
generatePagesRoute
(
normalizePagesRoute
(
pagesJson
,
options
),
config
),
].
join
(
'
,
'
)}
]`
}
function
generateConfig
(
globalName
:
string
,
pagesJson
:
Record
<
string
,
any
>
,
options
:
VitePluginUniResolvedOptions
)
{
delete
pagesJson
.
pages
delete
pagesJson
.
subPackages
delete
pagesJson
.
subpackages
pagesJson
.
compilerVersion
=
pkg
[
'
uni-app
'
].
compilerVersion
return
(
(
options
.
command
===
'
serve
'
?
''
:
`
${
globalName
}
['____'+appid+'____']=true
delete
${
globalName
}
['____'+appid+'____']
`
)
+
`
${
globalName
}
.__uniConfig=extend(
${
JSON
.
stringify
(
pagesJson
)}
,{
async,
debug,
networkTimeout,
sdkConfigs,
qqMapKey,
nvue,
router
})
`
)
}
packages/vite-plugin-uni/src/index.ts
浏览文件 @
ced10acc
...
...
@@ -85,5 +85,3 @@ export default function uniPlugin(
plugins
.
push
(...
uniPlugins
)
return
plugins
}
export
{
uniInjectPlugin
}
from
'
./configResolved/plugins/inject
'
scripts/utils.js
浏览文件 @
ced10acc
...
...
@@ -16,6 +16,7 @@ const priority = {
'
uni-cli-shared
'
:
60
,
'
uni-h5
'
:
50
,
'
uni-h5-vue
'
:
40
,
'
uni-h5-vite
'
:
40
,
'
uni-app-plus
'
:
30
,
'
vite-plugin-uni
'
:
20
,
'
size-check
'
:
1
,
...
...
yarn.lock
浏览文件 @
ced10acc
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录