Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
2dc6bd7d
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,发现更多精彩内容 >>
提交
2dc6bd7d
编写于
12月 28, 2021
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(h5): support jsx/tsx
上级
83c79f2c
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
62 addition
and
13 deletion
+62
-13
packages/uni-app-vite/src/plugins/easycom.ts
packages/uni-app-vite/src/plugins/easycom.ts
+2
-2
packages/uni-cli-shared/package.json
packages/uni-cli-shared/package.json
+1
-0
packages/uni-cli-shared/src/constants.ts
packages/uni-cli-shared/src/constants.ts
+1
-0
packages/uni-cli-shared/src/easycom.ts
packages/uni-cli-shared/src/easycom.ts
+5
-2
packages/uni-cli-shared/src/vite/index.ts
packages/uni-cli-shared/src/vite/index.ts
+3
-0
packages/uni-cli-shared/src/vue/babel.ts
packages/uni-cli-shared/src/vue/babel.ts
+16
-0
packages/uni-cli-shared/src/vue/index.ts
packages/uni-cli-shared/src/vue/index.ts
+1
-0
packages/uni-h5-vite/src/plugin/uni.ts
packages/uni-h5-vite/src/plugin/uni.ts
+4
-0
packages/uni-h5-vite/src/plugins/easycom.ts
packages/uni-h5-vite/src/plugins/easycom.ts
+2
-2
packages/vite-plugin-uni/src/index.ts
packages/vite-plugin-uni/src/index.ts
+6
-2
packages/vite-plugin-uni/src/utils/plugin.ts
packages/vite-plugin-uni/src/utils/plugin.ts
+6
-0
packages/vite-plugin-uni/src/vue/options.ts
packages/vite-plugin-uni/src/vue/options.ts
+9
-1
pnpm-lock.yaml
pnpm-lock.yaml
+6
-4
未找到文件。
packages/uni-app-vite/src/plugins/easycom.ts
浏览文件 @
2dc6bd7d
...
...
@@ -3,11 +3,11 @@ import { Plugin } from 'vite'
import
{
createFilter
,
FilterPattern
}
from
'
@rollup/pluginutils
'
import
{
EXTNAME_VUE
,
parseVueRequest
,
matchEasycom
,
addImportDeclaration
,
genResolveEasycomCode
,
EXTNAME_VUE_TEMPLATE
,
}
from
'
@dcloudio/uni-cli-shared
'
interface
UniEasycomPluginOptions
{
...
...
@@ -26,7 +26,7 @@ export function uniEasycomPlugin(options: UniEasycomPluginOptions): Plugin {
const
{
filename
,
query
}
=
parseVueRequest
(
id
)
if
(
query
.
type
!==
'
template
'
&&
(
query
.
vue
||
!
EXTNAME_VUE
.
includes
(
path
.
extname
(
filename
)))
(
query
.
vue
||
!
EXTNAME_VUE
_TEMPLATE
.
includes
(
path
.
extname
(
filename
)))
)
{
return
}
...
...
packages/uni-cli-shared/package.json
浏览文件 @
2dc6bd7d
...
...
@@ -18,6 +18,7 @@
"url"
:
"https://github.com/dcloudio/uni-app/issues"
},
"dependencies"
:
{
"@babel/core"
:
"^7.16.5"
,
"@babel/parser"
:
"^7.16.4"
,
"@babel/types"
:
"^7.16.0"
,
"@dcloudio/uni-i18n"
:
"3.0.0-alpha-3030420211227001"
,
...
...
packages/uni-cli-shared/src/constants.ts
浏览文件 @
2dc6bd7d
...
...
@@ -2,6 +2,7 @@ export const PUBLIC_DIR = 'static'
export
const
EXTNAME_JS
=
[
'
.js
'
,
'
.ts
'
,
'
.jsx
'
,
'
.tsx
'
]
export
const
EXTNAME_TS
=
[
'
.ts
'
,
'
.tsx
'
]
export
const
EXTNAME_VUE
=
[
'
.vue
'
,
'
.nvue
'
]
export
const
EXTNAME_VUE_TEMPLATE
=
[
'
.vue
'
,
'
.nvue
'
,
'
.jsx
'
,
'
.tsx
'
]
export
const
EXTNAME_VUE_RE
=
/
\.(
vue|nvue
)
$/
export
const
EXTNAME_JS_RE
=
/
\.[
jt
]
sx
?
$/
export
const
EXTNAME_TS_RE
=
/
\.
tsx
?
$/
...
...
packages/uni-cli-shared/src/easycom.ts
浏览文件 @
2dc6bd7d
...
...
@@ -70,7 +70,10 @@ export function initEasycoms(
const
res
=
{
options
,
filter
:
createFilter
(
[
'
components/*/*.vue
'
,
'
uni_modules/*/components/*/*.vue
'
],
[
'
components/*/*.(vue|jsx|tsx)
'
,
'
uni_modules/*/components/*/*.(vue|jsx|tsx)
'
,
],
[],
{
resolve
:
inputDir
,
...
...
@@ -110,7 +113,7 @@ function initEasycom({
dirs
,
rootDir
,
custom
,
extensions
=
[
'
.vue
'
],
extensions
=
[
'
.vue
'
,
'
.jsx
'
,
'
.tsx
'
],
}:
EasycomOption
)
{
clearEasycom
()
const
easycomsObj
=
Object
.
create
(
null
)
...
...
packages/uni-cli-shared/src/vite/index.ts
浏览文件 @
2dc6bd7d
...
...
@@ -24,6 +24,9 @@ interface UniVitePluginUniOptions {
directiveTransforms
?:
CompilerOptions
[
'
directiveTransforms
'
]
nodeTransforms
?:
CompilerOptions
[
'
nodeTransforms
'
]
}
jsxOptions
?:
{
babelPlugins
?:
any
[]
}
copyOptions
?:
CopyOptions
|
(()
=>
CopyOptions
)
}
export
interface
UniVitePlugin
extends
Plugin
{
...
...
packages/uni-cli-shared/src/vue/babel.ts
0 → 100644
浏览文件 @
2dc6bd7d
import
*
as
BabelCore
from
'
@babel/core
'
import
type
{
PluginObj
}
from
'
@babel/core
'
import
{
isBuiltInComponent
}
from
'
@dcloudio/uni-shared
'
export
function
transformUniH5Jsx
({
types
}:
typeof
BabelCore
):
PluginObj
{
return
{
name
:
'
babel-plugin-uni-h5-jsx
'
,
visitor
:
{
JSXOpeningElement
({
node
:
{
name
}
})
{
if
(
types
.
isJSXIdentifier
(
name
)
&&
isBuiltInComponent
(
name
.
name
))
{
name
.
name
=
'
v-uni-
'
+
name
.
name
}
},
},
}
}
packages/uni-cli-shared/src/vue/index.ts
浏览文件 @
2dc6bd7d
export
*
from
'
./transforms
'
export
*
from
'
./utils
'
export
{
transformUniH5Jsx
}
from
'
./babel
'
export
{
isExternalUrl
}
from
'
./transforms/templateUtils
'
packages/uni-h5-vite/src/plugin/uni.ts
浏览文件 @
2dc6bd7d
...
...
@@ -3,6 +3,7 @@ import {
transformMatchMedia
,
transformPageHead
,
transformTapToClick
,
transformUniH5Jsx
,
UniVitePlugin
,
}
from
'
@dcloudio/uni-cli-shared
'
import
{
isH5NativeTag
,
isH5CustomElement
}
from
'
@dcloudio/uni-shared
'
...
...
@@ -25,5 +26,8 @@ export function createUni(): UniVitePlugin['uni'] {
assets
:
[
'
hybrid/html
'
],
},
compilerOptions
,
jsxOptions
:
{
babelPlugins
:
[
transformUniH5Jsx
],
},
}
}
packages/uni-h5-vite/src/plugins/easycom.ts
浏览文件 @
2dc6bd7d
...
...
@@ -5,7 +5,6 @@ import { camelize, capitalize } from '@vue/shared'
import
{
COMPONENT_PREFIX
,
isBuiltInComponent
}
from
'
@dcloudio/uni-shared
'
import
{
EXTNAME_VUE
,
H5_COMPONENTS_STYLE_PATH
,
BASE_COMPONENTS_STYLE_PATH
,
COMPONENT_DEPS_CSS
,
...
...
@@ -15,6 +14,7 @@ import {
matchEasycom
,
addImportDeclaration
,
genResolveEasycomCode
,
EXTNAME_VUE_TEMPLATE
,
}
from
'
@dcloudio/uni-cli-shared
'
const
H5_COMPONENTS_PATH
=
'
@dcloudio/uni-h5
'
...
...
@@ -71,7 +71,7 @@ export function uniEasycomPlugin(options: UniEasycomPluginOptions): Plugin {
const
{
filename
,
query
}
=
parseVueRequest
(
id
)
if
(
query
.
type
!==
'
template
'
&&
(
query
.
vue
||
!
EXTNAME_VUE
.
includes
(
path
.
extname
(
filename
)))
(
query
.
vue
||
!
EXTNAME_VUE
_TEMPLATE
.
includes
(
path
.
extname
(
filename
)))
)
{
return
}
...
...
packages/vite-plugin-uni/src/index.ts
浏览文件 @
2dc6bd7d
...
...
@@ -46,7 +46,7 @@ export interface VitePluginUniOptions {
inputDir
?:
string
outputDir
?:
string
vueOptions
?:
VueOptions
vueJsxOptions
?:
VueJSXPluginOptions
|
boolean
vueJsxOptions
?:
(
VueJSXPluginOptions
&
{
babelPlugins
?:
any
[]
})
|
boolean
viteLegacyOptions
?:
ViteLegacyOptions
|
false
}
export
interface
VitePluginUniResolvedOptions
extends
VitePluginUniOptions
{
...
...
@@ -104,7 +104,11 @@ export default function uniPlugin(
if
(
options
.
vueJsxOptions
)
{
plugins
.
push
(
vueJsxPlugin
(
initPluginVueJsxOptions
(
options
,
uniPluginOptions
.
compilerOptions
)
initPluginVueJsxOptions
(
options
,
uniPluginOptions
.
compilerOptions
,
uniPluginOptions
.
jsxOptions
)
)
)
}
...
...
packages/vite-plugin-uni/src/utils/plugin.ts
浏览文件 @
2dc6bd7d
...
...
@@ -24,12 +24,14 @@ export function initPluginUniOptions(UniVitePlugins: UniVitePlugin[]) {
const
targets
:
UniViteCopyPluginTarget
[]
=
[]
const
transformEvent
:
Record
<
string
,
string
>
=
Object
.
create
(
null
)
const
compilerOptions
:
Required
<
UniVitePlugin
>
[
'
uni
'
][
'
compilerOptions
'
]
=
{}
const
jsxOptions
:
Required
<
UniVitePlugin
>
[
'
uni
'
][
'
jsxOptions
'
]
=
{}
let
compiler
:
TemplateCompiler
|
undefined
UniVitePlugins
.
forEach
((
plugin
)
=>
{
const
{
compiler
:
pluginTemplateCompiler
,
copyOptions
:
pluginCopyOptions
,
compilerOptions
:
pluginCompilerOptions
,
jsxOptions
:
pluginJsxOptions
,
}
=
plugin
.
uni
||
{}
if
(
pluginTemplateCompiler
)
{
compiler
=
pluginTemplateCompiler
...
...
@@ -37,6 +39,9 @@ export function initPluginUniOptions(UniVitePlugins: UniVitePlugin[]) {
if
(
pluginCompilerOptions
)
{
extend
(
compilerOptions
,
pluginCompilerOptions
)
}
if
(
pluginJsxOptions
)
{
extend
(
jsxOptions
,
pluginJsxOptions
)
}
if
(
pluginCopyOptions
)
{
let
copyOptions
=
pluginCopyOptions
as
CopyOptions
if
(
isFunction
(
pluginCopyOptions
))
{
...
...
@@ -58,6 +63,7 @@ export function initPluginUniOptions(UniVitePlugins: UniVitePlugin[]) {
},
transformEvent
,
compilerOptions
,
jsxOptions
,
}
}
...
...
packages/vite-plugin-uni/src/vue/options.ts
浏览文件 @
2dc6bd7d
...
...
@@ -106,7 +106,8 @@ export function initPluginVueJsxOptions(
options
:
VitePluginUniResolvedOptions
,
{
isCustomElement
,
}:
Required
<
Required
<
UniVitePlugin
>
[
'
uni
'
]
>
[
'
compilerOptions
'
]
}:
Required
<
Required
<
UniVitePlugin
>
[
'
uni
'
]
>
[
'
compilerOptions
'
],
jsxOptions
:
Required
<
Required
<
UniVitePlugin
>
[
'
uni
'
]
>
[
'
jsxOptions
'
]
)
{
const
vueJsxOptions
=
isPlainObject
(
options
.
vueJsxOptions
)
?
options
.
vueJsxOptions
...
...
@@ -115,6 +116,13 @@ export function initPluginVueJsxOptions(
vueJsxOptions
.
optimize
=
true
}
vueJsxOptions
.
isCustomElement
=
isCustomElement
as
(
tag
:
string
)
=>
boolean
if
(
!
vueJsxOptions
.
babelPlugins
)
{
vueJsxOptions
.
babelPlugins
=
[]
}
if
(
isArray
(
jsxOptions
.
babelPlugins
))
{
vueJsxOptions
.
babelPlugins
.
push
(...
jsxOptions
.
babelPlugins
)
}
return
vueJsxOptions
}
...
...
pnpm-lock.yaml
浏览文件 @
2dc6bd7d
...
...
@@ -353,6 +353,7 @@ importers:
packages/uni-cli-shared
:
specifiers
:
'
@babel/core'
:
^7.16.5
'
@babel/parser'
:
^7.16.4
'
@babel/types'
:
^7.16.0
'
@dcloudio/uni-i18n'
:
3.0.0-alpha-3030420211227001
...
...
@@ -395,7 +396,8 @@ importers:
tapable
:
^2.2.0
xregexp
:
3.1.0
dependencies
:
'
@babel/parser'
:
7.16.4
'
@babel/core'
:
7.16.5
'
@babel/parser'
:
7.16.6
'
@babel/types'
:
7.16.0
'
@dcloudio/uni-i18n'
:
link:../uni-i18n
'
@dcloudio/uni-shared'
:
link:../uni-shared
...
...
@@ -3242,7 +3244,7 @@ packages:
/@vue/compiler-core/3.2.26
:
resolution
:
{
integrity
:
sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw==
}
dependencies
:
'
@babel/parser'
:
7.16.
4
'
@babel/parser'
:
7.16.
6
'
@vue/shared'
:
3.2.26
estree-walker
:
2.0.2
source-map
:
0.6.1
...
...
@@ -3256,7 +3258,7 @@ packages:
/@vue/compiler-sfc/3.2.26
:
resolution
:
{
integrity
:
sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw==
}
dependencies
:
'
@babel/parser'
:
7.16.
4
'
@babel/parser'
:
7.16.
6
'
@vue/compiler-core'
:
3.2.26
'
@vue/compiler-dom'
:
3.2.26
'
@vue/compiler-ssr'
:
3.2.26
...
...
@@ -3279,7 +3281,7 @@ packages:
/@vue/reactivity-transform/3.2.26
:
resolution
:
{
integrity
:
sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ==
}
dependencies
:
'
@babel/parser'
:
7.16.
4
'
@babel/parser'
:
7.16.
6
'
@vue/compiler-core'
:
3.2.26
'
@vue/shared'
:
3.2.26
estree-walker
:
2.0.2
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录