Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
Chameleon
提交
efecd2f6
C
Chameleon
项目概览
DiDi
/
Chameleon
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Chameleon
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
efecd2f6
编写于
4月 15, 2019
作者:
Y
yylgit
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
find component
上级
b9d4e395
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
48 addition
and
160 deletion
+48
-160
packages/chameleon-tool-utils/src/index.js
packages/chameleon-tool-utils/src/index.js
+27
-0
packages/chameleon-tool/configs/index.js
packages/chameleon-tool/configs/index.js
+0
-1
packages/chameleon-tool/configs/mvvm/cmlNode.js
packages/chameleon-tool/configs/mvvm/cmlNode.js
+0
-23
packages/chameleon-tool/configs/mvvm/mvvmGraphPlugin.js
packages/chameleon-tool/configs/mvvm/mvvmGraphPlugin.js
+0
-131
packages/chameleon-tool/configs/mvvm/styleWrapLoader.js
packages/chameleon-tool/configs/mvvm/styleWrapLoader.js
+3
-2
packages/mvvm-file-loader/dist/index.js
packages/mvvm-file-loader/dist/index.js
+0
-1
packages/mvvm-pack/compiler.js
packages/mvvm-pack/compiler.js
+15
-2
packages/mvvm-pack/mvvmGraphPlugin.js
packages/mvvm-pack/mvvmGraphPlugin.js
+3
-0
未找到文件。
packages/chameleon-tool-utils/src/index.js
浏览文件 @
efecd2f6
...
...
@@ -617,6 +617,22 @@ _.getOnePackageComponents = function (npmName, packageFilePath, cmlType, context
})
}
})
// 多态组件之外 还有普通的cml组件 怎么判断 文件名中.cml 用.分隔后数组长度是2 后面是cml
let
cmlGlobPath
=
path
.
join
(
context
,
'
node_modules
'
,
npmName
,
main
,
'
/**/*.cml
'
);
glob
.
sync
(
cmlGlobPath
).
forEach
(
cmlFilePath
=>
{
// 其他端的多态cml组件排除在外
let
paths
=
path
.
basename
(
cmlFilePath
).
split
(
'
.
'
);
if
(
paths
.
length
===
2
&&
paths
[
1
]
===
'
cml
'
)
{
if
(
_
.
isFile
(
cmlFilePath
))
{
let
comKey
=
path
.
basename
(
cmlFilePath
).
replace
(
cmlExtReg
,
''
);
components
.
push
({
name
:
comKey
,
filePath
:
cmlFilePath
,
refPath
:
_
.
npmComponentRefPath
(
cmlFilePath
,
context
)
})
}
}
})
}
return
components
;
...
...
@@ -684,6 +700,17 @@ _.handleComponentUrl = function (context, cmlFilePath, comPath, cmlType) {
}
}
if
(
!
findFile
)
{
if
(
_
.
isCli
())
{
const
result
=
{
filePath
:
''
,
refUrl
};
cml
.
event
.
emit
(
'
find-component
'
,
{
context
,
cmlFilePath
,
comPath
,
cmlType
},
result
);
// 通过扩展找到文件
if
(
result
.
filePath
&&
_
.
isFile
(
result
.
filePath
))
{
return
result
;
}
}
return
{
filePath
:
''
,
refUrl
...
...
packages/chameleon-tool/configs/index.js
浏览文件 @
efecd2f6
...
...
@@ -21,7 +21,6 @@ module.exports = async function (options) {
await
utils
.
setFreePort
();
let
{
type
,
media
}
=
options
;
let
webpackConfig
;
debugger
if
(
cml
.
config
.
get
().
extPlatform
&&
~
Object
.
keys
(
cml
.
config
.
get
().
extPlatform
).
indexOf
(
type
))
{
webpackConfig
=
getExtendConfig
(
options
);
}
else
{
...
...
packages/chameleon-tool/configs/mvvm/cmlNode.js
已删除
100644 → 0
浏览文件 @
b9d4e395
class
CMLNode
{
constructor
(
options
=
{})
{
this
.
ext
;
this
.
realPath
;
// 文件物理地址
this
.
nodeType
;
// App/Page/Component/Module // 节点类型 CML文件分为App/Page/Component 其他的为Module CML文件中的每一个部分也是一个Node节点
this
.
moduleType
;
// template/style/script/json/asset CML为CML文件
this
.
dependencies
=
[];
// 该节点的直接依赖编译及诶点 app.cml依赖pages.cml pages.cml依赖components.cml js依赖js cmss依赖cmss
this
.
childrens
=
[];
// 子模块 CML才有子模块
this
.
parent
;
// 父模块 CML文件中的子模块才有
this
.
source
;
// 模块源代码
this
.
convert
;
// AST JSON
this
.
output
;
// 模块输出 各种过程操作该字段
// this.compiled; // 是否经过编译
this
.
extra
;
// 用户可以额外添加的信息
this
.
identifier
;
// 节点唯一标识
this
.
modId
;
// 模块化的id
Object
.
keys
(
options
).
forEach
(
key
=>
{
this
[
key
]
=
options
[
key
];
})
}
}
module
.
exports
=
CMLNode
;
packages/chameleon-tool/configs/mvvm/mvvmGraphPlugin.js
已删除
100644 → 0
浏览文件 @
b9d4e395
const
CMLNode
=
require
(
'
./cmlNode.js
'
);
const
path
=
require
(
'
path
'
);
class
mvvmGraphPlugin
{
constructor
()
{
this
.
moduleRule
=
[
// 文件后缀对应module信息
{
test
:
/
\.
css|
\.
less$/
,
moduleType
:
'
style
'
,
attrs
:
{
lang
:
'
less
'
}
},
{
test
:
/
\.
stylus|
\.
styls$/
,
moduleType
:
'
style
'
,
attrs
:
{
lang
:
'
stylus
'
}
},
{
test
:
/
\.
js|
\.
interface$/
,
moduleType
:
'
script
'
},
{
test
:
/
\.
json$/
,
moduleType
:
'
json
'
},
{
test
:
/
\.(
png|jpe
?
g|gif|svg|mp4|webm|ogg|mp3|wav|flac|aac|woff|woff2
?
|eot|ttf|otf
)(\?
.*
)?
$/
,
moduleType
:
'
asset
'
}
]
}
apply
(
compiler
)
{
let
self
=
this
;
compiler
.
plugin
(
'
should-emit
'
,
function
(
compilation
)
{
let
outPutFile
=
{};
// 输出文件 key为文件路径 value为输出文件内容
let
modules
=
compilation
.
modules
;
let
appModule
;
for
(
let
i
=
0
;
i
<
modules
.
length
;
i
++
)
{
if
(
modules
[
i
].
_nodeType
===
'
app
'
)
{
appModule
=
modules
[
i
];
}
// 静态资源的写入
if
(
modules
[
i
].
_nodeType
===
'
module
'
&&
modules
[
i
].
_moduleType
===
'
asset
'
)
{
if
(
modules
[
i
].
_assetSource
&&
modules
[
i
].
_outputPath
)
{
outPutFile
[
modules
[
i
].
_outputPath
]
=
modules
[
i
].
_assetSource
;
}
}
}
if
(
!
appModule
)
{
throw
new
Error
(
'
not find app.cml node!
'
)
}
let
moduleNodeMap
=
new
Map
();
// appModule
let
mvvmGraph
=
self
.
createGraph
(
appModule
,
null
,
moduleNodeMap
);
// 返回false 不进入emit阶段
return
false
;
})
}
// 创建依赖图
createGraph
(
targetModule
,
currentNode
,
moduleNodeMap
)
{
// 第一个app节点
if
(
!
currentNode
)
{
currentNode
=
this
.
createNode
(
targetModule
);
moduleNodeMap
.
set
(
targetModule
,
currentNode
);
}
targetModule
.
dependencies
.
forEach
(
item
=>
{
if
(
item
.
module
)
{
if
(
moduleNodeMap
.
has
(
item
.
module
))
{
let
subNode
=
moduleNodeMap
.
get
(
item
.
module
);
if
(
subNode
.
realPath
===
currentNode
.
realPath
)
{
subNode
.
parent
=
currentNode
;
currentNode
.
childrens
.
push
(
subNode
);
}
else
{
currentNode
.
dependencies
.
push
(
subNode
);
}
}
else
{
let
subNode
=
this
.
createNode
(
item
.
module
);
moduleNodeMap
.
set
(
item
.
module
,
subNode
);
if
(
subNode
.
realPath
===
currentNode
.
realPath
)
{
subNode
.
parent
=
currentNode
;
currentNode
.
childrens
.
push
(
subNode
);
}
else
{
currentNode
.
dependencies
.
push
(
subNode
);
}
this
.
createGraph
(
item
.
module
,
subNode
,
moduleNodeMap
)
}
}
})
return
currentNode
;
}
// 创建单个节点
createNode
(
module
)
{
let
options
=
{};
options
.
realPath
=
module
.
resource
;
options
.
ext
=
path
.
extname
(
module
.
resource
);
options
.
nodeType
=
module
.
_nodeType
||
'
module
'
;
options
.
identifier
=
module
.
rawRequest
;
options
.
modId
=
module
.
rawRequest
;
// 模块化的id 这里可以优化成hash
if
(
options
.
nodeType
===
'
module
'
)
{
if
(
module
.
_moduleType
)
{
options
.
moduleType
=
module
.
_moduleType
;
}
else
{
this
.
moduleRule
.
forEach
(
rule
=>
{
if
(
rule
.
test
.
test
(
module
.
resource
))
{
options
.
moduleType
=
rule
.
moduleType
;
}
})
options
.
moduleType
=
options
.
moduleType
||
'
other
'
;
}
options
.
source
=
module
.
_cmlSource
||
module
.
_source
&&
module
.
_source
.
_value
;
}
return
new
CMLNode
(
options
)
}
}
module
.
exports
=
mvvmGraphPlugin
;
\ No newline at end of file
packages/chameleon-tool/configs/mvvm/styleWrapLoader.js
浏览文件 @
efecd2f6
...
...
@@ -3,6 +3,7 @@
module
.
exports
=
function
(
content
)
{
this
.
_module
.
_nodeType
=
'
module
'
;
this
.
_module
.
_moduleType
=
'
style
'
;
this
.
_cmlSource
=
content
;
this
.
_module
.
_cmlSource
=
content
;
return
`module.exports =
${
JSON
.
stringify
(
content
)}
`
}
\ No newline at end of file
}
packages/mvvm-file-loader/dist/index.js
浏览文件 @
efecd2f6
...
...
@@ -81,7 +81,6 @@ function loader(content) {
}
else
if
(
typeof
options
.
publicPath
===
'
string
'
)
{
publicPath
=
options
.
publicPath
+
outputPath
;
}
debugger
this
.
_module
.
_nodeType
=
'
module
'
;
this
.
_module
.
_moduleType
=
'
asset
'
;
this
.
_module
.
_cmlSource
=
content
;
...
...
packages/mvvm-pack/compiler.js
浏览文件 @
efecd2f6
...
...
@@ -77,6 +77,7 @@ class Compiler {
throw
new
Error
(
'
not find app.cml node!
'
)
}
// 记录已经创建的节点
let
moduleNodeMap
=
new
Map
();
this
.
projectGraph
=
this
.
createGraph
(
appModule
,
null
,
moduleNodeMap
);
...
...
@@ -91,9 +92,11 @@ class Compiler {
}
targetModule
.
dependencies
.
forEach
(
item
=>
{
if
(
item
.
module
)
{
// 如果已经创建了节点
if
(
moduleNodeMap
.
has
(
item
.
module
))
{
let
subNode
=
moduleNodeMap
.
get
(
item
.
module
);
// 如果 子节点的文件路径和父节点相同 ze是CML文件 放入childrens
if
(
subNode
.
realPath
===
currentNode
.
realPath
)
{
subNode
.
parent
=
currentNode
;
currentNode
.
childrens
.
push
(
subNode
);
...
...
@@ -102,6 +105,7 @@ class Compiler {
}
}
else
{
// 创建节点
let
subNode
=
this
.
createNode
(
item
.
module
);
moduleNodeMap
.
set
(
item
.
module
,
subNode
);
if
(
subNode
.
realPath
===
currentNode
.
realPath
)
{
...
...
@@ -110,6 +114,7 @@ class Compiler {
}
else
{
currentNode
.
dependencies
.
push
(
subNode
);
}
// 递归创建
this
.
createGraph
(
item
.
module
,
subNode
,
moduleNodeMap
)
}
}
...
...
@@ -126,10 +131,11 @@ class Compiler {
options
.
identifier
=
module
.
rawRequest
;
options
.
modId
=
module
.
rawRequest
;
// 模块化的id 这里可以优化成hash
if
(
options
.
nodeType
===
'
module
'
)
{
// loader中设置
if
(
module
.
_moduleType
)
{
options
.
moduleType
=
module
.
_moduleType
;
}
else
{
// 根据后缀
this
.
moduleRule
.
forEach
(
rule
=>
{
if
(
rule
.
test
.
test
(
module
.
resource
))
{
options
.
moduleType
=
rule
.
moduleType
;
...
...
@@ -137,8 +143,15 @@ class Compiler {
})
options
.
moduleType
=
options
.
moduleType
||
'
other
'
;
}
options
.
source
=
module
.
_cmlSource
||
module
.
_source
&&
module
.
_source
.
_value
;
}
// 可能出现module._cmlSource为空字符串的情况
if
(
module
.
_cmlSource
!==
undefined
)
{
options
.
source
=
module
.
_cmlSource
;
}
else
{
options
.
source
=
module
.
_source
&&
module
.
_source
.
_value
;
}
return
new
CMLNode
(
options
)
}
...
...
packages/mvvm-pack/mvvmGraphPlugin.js
浏览文件 @
efecd2f6
...
...
@@ -12,6 +12,9 @@ class mvvmGraphPlugin {
let
PlatformPlugin
=
require
(
path
.
join
(
cml
.
projectRoot
,
'
node_modules
'
,
npmName
));
// eslint-disable-line
let
plugin
=
new
PlatformPlugin
(
this
.
options
);
let
mvvmCompiler
=
new
MvvmCompiler
(
compiler
);
cml
.
event
.
on
(
'
find-component
'
,
function
(
{
context
,
cmlFilePath
,
comPath
,
cmlType
},
result
)
{
})
plugin
.
register
(
mvvmCompiler
);
compiler
.
plugin
(
'
should-emit
'
,
function
(
compilation
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录