Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
ed621e30
U
uni-app
项目概览
DCloud
/
uni-app
2 个月 前同步成功
通知
711
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,发现更多精彩内容 >>
提交
ed621e30
编写于
12月 07, 2023
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(nvue): 支持typescript
上级
59689b2c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
95 addition
and
70 deletion
+95
-70
packages/vue-cli-plugin-hbuilderx/build/webpack.nvue.conf.js
packages/vue-cli-plugin-hbuilderx/build/webpack.nvue.conf.js
+18
-0
packages/vue-cli-plugin-uni/lib/configure-webpack.js
packages/vue-cli-plugin-uni/lib/configure-webpack.js
+1
-70
packages/vue-cli-plugin-uni/lib/util.js
packages/vue-cli-plugin-uni/lib/util.js
+76
-0
未找到文件。
packages/vue-cli-plugin-hbuilderx/build/webpack.nvue.conf.js
浏览文件 @
ed621e30
...
...
@@ -349,6 +349,24 @@ try {
}
}
catch
(
e
)
{}
rules
.
push
({
test
:
/
\.
ts$/
,
use
:
[{
loader
:
require
.
resolve
(
'
babel-loader
'
,
{
paths
:
[
require
.
resolve
(
'
@vue/cli-plugin-babel
'
)]
})
},
{
loader
:
require
.
resolve
(
'
ts-loader
'
,
{
paths
:
[
require
.
resolve
(
'
@vue/cli-plugin-babel
'
)]
}),
options
:
Object
.
assign
({
transpileOnly
:
false
,
appendTsSuffixTo
:
[
'
\\
.nvue$
'
],
happyPackMode
:
false
},
require
(
'
@dcloudio/vue-cli-plugin-uni/lib/util
'
).
getTsLoadOptions
())
},
jsPreprocessorLoader
]
})
module
.
exports
=
function
()
{
return
{
target
:
'
node
'
,
// 激活 vue-loader 的 isServer 逻辑
...
...
packages/vue-cli-plugin-uni/lib/configure-webpack.js
浏览文件 @
ed621e30
const
fs
=
require
(
'
fs
'
)
const
path
=
require
(
'
path
'
)
const
webpack
=
require
(
'
webpack
'
)
const
CopyWebpackPlugin
=
require
(
'
copy-webpack-plugin
'
)
...
...
@@ -14,10 +13,6 @@ function resolve (dir) {
return
path
.
resolve
(
__dirname
,
'
..
'
,
dir
)
}
function
resolveModule
(
dir
)
{
return
path
.
resolve
(
process
.
env
.
UNI_CLI_CONTEXT
,
'
./node_modules
'
,
dir
)
}
module
.
exports
=
function
configureWebpack
(
platformOptions
,
manifestPlatformOptions
,
vueOptions
,
api
)
{
const
{
runByHBuilderX
,
// 使用 HBuilderX 运行
...
...
@@ -97,71 +92,7 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
matchUse
.
push
(
loader
)
}
const
userTsConfigJson
=
path
.
resolve
(
process
.
env
.
UNI_INPUT_DIR
,
'
tsconfig.json
'
)
const
defaultTsConfigJson
=
path
.
resolve
(
process
.
env
.
UNI_CLI_CONTEXT
,
'
tsconfig.json
'
)
const
tsConfigJsonFile
=
fs
.
existsSync
(
userTsConfigJson
)
?
userTsConfigJson
:
defaultTsConfigJson
const
context
=
isInHBuilderX
?
process
.
env
.
UNI_INPUT_DIR
:
process
.
env
.
UNI_CLI_CONTEXT
const
tsLoaderOptions
=
{
context
,
configFile
:
tsConfigJsonFile
,
compilerOptions
:
{
baseUrl
:
context
,
typeRoots
:
[
resolveModule
(
'
@dcloudio/types
'
),
resolveModule
(
'
@types
'
),
path
.
resolve
(
process
.
env
.
UNI_CLI_CONTEXT
,
'
types
'
)
],
types
:
[
'
uni-app
'
,
'
uni-app-vue2
'
,
'
webpack-env
'
],
paths
:
{
'
@/*
'
:
[
path
.
join
(
process
.
env
.
UNI_INPUT_DIR
,
'
*
'
)
],
vue
:
[
resolveModule
(
'
vue
'
)
],
vuex
:
[
resolveModule
(
'
vuex
'
)
],
'
vue-class-component
'
:
[
resolveModule
(
'
vue-class-component
'
)
],
'
vue-property-decorator
'
:
[
resolveModule
(
'
vue-property-decorator
'
)
],
tslib
:
[
resolveModule
(
'
tslib
'
)
],
'
mpvue-page-factory
'
:
[
resolveModule
(
'
@dcloudio/vue-cli-plugin-uni/packages/mpvue-page-factory
'
)
],
'
@vue/composition-api
'
:
[
resolveModule
(
'
@dcloudio/vue-cli-plugin-uni/packages/@vue/composition-api
'
)
],
'
@dcloudio/uni-app
'
:
[
resolveModule
(
'
@dcloudio/uni-app
'
)
]
}
},
errorFormatter
(
error
,
colors
)
{
const
messageColor
=
error
.
severity
===
'
warning
'
?
colors
.
bold
.
yellow
:
colors
.
bold
.
red
const
filePath
=
path
.
relative
(
process
.
env
.
UNI_INPUT_DIR
,
error
.
file
).
replace
(
'
.vue.ts
'
,
'
.vue
'
)
if
(
error
.
code
===
2307
&&
error
.
content
.
includes
(
'
.vue
'
))
{
error
.
content
=
error
.
content
.
replace
(
'
Cannot find module
'
,
''
)
+
'
script 节点必须使用 lang="ts",文档参考地址:https://uniapp.dcloud.io/frame?id=vue-ts
'
}
return
messageColor
(
`[tsl] ERROR at
${
filePath
}
:
${
error
.
line
}
TS
${
error
.
code
}
:
${
error
.
content
}
`
)
}
}
const
tsLoaderOptions
=
require
(
'
./util
'
).
getTsLoadOptions
()
function
updateTsLoader
(
rawRules
,
fakeFile
,
loader
)
{
const
matchRule
=
rawRules
.
find
(
createMatcher
(
fakeFile
))
...
...
packages/vue-cli-plugin-uni/lib/util.js
浏览文件 @
ed621e30
const
fs
=
require
(
'
fs
'
)
const
path
=
require
(
'
path
'
)
const
{
pathToGlob
}
=
require
(
'
@dcloudio/uni-cli-shared/lib/util
'
)
...
...
@@ -37,5 +39,79 @@ module.exports = {
path
.
resolve
(
process
.
env
.
UNI_INPUT_DIR
,
'
cloudfunctions-tcb
'
)
]
}
},
getTsLoadOptions
()
{
const
{
isInHBuilderX
// 在 HBuilderX 的插件中
}
=
require
(
'
@dcloudio/uni-cli-shared
'
)
const
userTsConfigJson
=
path
.
resolve
(
process
.
env
.
UNI_INPUT_DIR
,
'
tsconfig.json
'
)
const
defaultTsConfigJson
=
path
.
resolve
(
process
.
env
.
UNI_CLI_CONTEXT
,
'
tsconfig.json
'
)
const
tsConfigJsonFile
=
fs
.
existsSync
(
userTsConfigJson
)
?
userTsConfigJson
:
defaultTsConfigJson
const
context
=
isInHBuilderX
?
process
.
env
.
UNI_INPUT_DIR
:
process
.
env
.
UNI_CLI_CONTEXT
function
resolveModule
(
dir
)
{
return
path
.
resolve
(
process
.
env
.
UNI_CLI_CONTEXT
,
'
./node_modules
'
,
dir
)
}
return
{
context
,
configFile
:
tsConfigJsonFile
,
compilerOptions
:
{
baseUrl
:
context
,
typeRoots
:
[
resolveModule
(
'
@dcloudio/types
'
),
resolveModule
(
'
@types
'
),
path
.
resolve
(
process
.
env
.
UNI_CLI_CONTEXT
,
'
types
'
)
],
types
:
[
'
uni-app
'
,
'
uni-app-vue2
'
,
'
webpack-env
'
],
paths
:
{
'
@/*
'
:
[
path
.
join
(
process
.
env
.
UNI_INPUT_DIR
,
'
*
'
)
],
vue
:
[
resolveModule
(
'
vue
'
)
],
vuex
:
[
resolveModule
(
'
vuex
'
)
],
'
vue-class-component
'
:
[
resolveModule
(
'
vue-class-component
'
)
],
'
vue-property-decorator
'
:
[
resolveModule
(
'
vue-property-decorator
'
)
],
tslib
:
[
resolveModule
(
'
tslib
'
)
],
'
mpvue-page-factory
'
:
[
resolveModule
(
'
@dcloudio/vue-cli-plugin-uni/packages/mpvue-page-factory
'
)
],
'
@vue/composition-api
'
:
[
resolveModule
(
'
@dcloudio/vue-cli-plugin-uni/packages/@vue/composition-api
'
)
],
'
@dcloudio/uni-app
'
:
[
resolveModule
(
'
@dcloudio/uni-app
'
)
]
}
},
errorFormatter
(
error
,
colors
)
{
const
messageColor
=
error
.
severity
===
'
warning
'
?
colors
.
bold
.
yellow
:
colors
.
bold
.
red
const
filePath
=
path
.
relative
(
process
.
env
.
UNI_INPUT_DIR
,
error
.
file
).
replace
(
'
.vue.ts
'
,
'
.vue
'
)
if
(
error
.
code
===
2307
&&
error
.
content
.
includes
(
'
.vue
'
))
{
error
.
content
=
error
.
content
.
replace
(
'
Cannot find module
'
,
''
)
+
'
script 节点必须使用 lang="ts",文档参考地址:https://uniapp.dcloud.io/frame?id=vue-ts
'
}
return
messageColor
(
`[tsl] ERROR at
${
filePath
}
:
${
error
.
line
}
TS
${
error
.
code
}
:
${
error
.
content
}
`
)
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录