Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
V
vue-cli-panyana
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
张英杰
vue-cli-panyana
Commits
5b57a372
提交
5b57a372
authored
12月 18, 2019
作者:
潘亚楠
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
create 命令
上级
e053fd09
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
85 行增加
和
33 行删除
+85
-33
index.ts
src/bin/index.ts
+3
-3
template.config.ts
src/config/template.config.ts
+2
-7
create.ts
src/lib/create.ts
+31
-0
create_vue2.ts
src/lib/create_vue2.ts
+34
-0
listTemplates.ts
src/lib/listTemplates.ts
+3
-3
Git.test.ts
src/test/util/Git.test.ts
+1
-1
Git.ts
src/util/Git.ts
+11
-19
没有找到文件。
src/bin/index.ts
浏览文件 @
5b57a372
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
import
*
as
program
from
'commander'
;
import
*
as
program
from
'commander'
;
import
{
hasTemplate
}
from
'../config/template.config'
;
import
{
hasTemplate
}
from
'../config/template.config'
;
import
listTemplates
from
'../lib/listTemplates'
;
import
listTemplates
from
'../lib/listTemplates'
;
import
{
create
}
from
'../lib/create'
// 版本号
// 版本号
program
program
.
version
(
`
${
require
(
'../../package.json'
).
version
}
`
)
.
version
(
`
${
require
(
'../../package.json'
).
version
}
`
)
...
@@ -11,9 +12,8 @@ program
...
@@ -11,9 +12,8 @@ program
program
program
.
command
(
'create <templateName> <projectName>'
)
.
command
(
'create <templateName> <projectName>'
)
.
description
(
'create a project from a template'
)
.
description
(
'create a project from a template'
)
.
action
((
templateName
:
string
,
projectName
:
string
,
cmd
)
=>
{
.
action
((
templateName
:
string
,
projectName
:
string
,
options
)
=>
{
console
.
log
(
templateName
);
create
(
templateName
,
projectName
,
options
);
console
.
log
(
projectName
);
})
})
// ls command
// ls command
program
program
...
...
src/config/template.config.ts
浏览文件 @
5b57a372
...
@@ -3,18 +3,13 @@
...
@@ -3,18 +3,13 @@
* @author panyanan
* @author panyanan
* @information 框架模板配置文件
* @information 框架模板配置文件
*/
*/
export
interface
Repo
{
readonly
url
:
string
,
// 仓库地址
readonly
username
:
string
,
// 用户名
readonly
password
:
string
,
// 用户密码
}
export
interface
Template
{
export
interface
Template
{
readonly
name
:
string
,
// 模板名称
readonly
name
:
string
,
// 模板名称
readonly
desc
:
string
,
// 模板描述
readonly
desc
:
string
,
// 模板描述
readonly
repo
:
Repo
,
// 模板仓库信息
readonly
repo
:
string
,
// 模板仓库信息
}
}
export
const
Templates
:
Template
[]
=
[
export
const
Templates
:
Template
[]
=
[
{
name
:
'vue2
.0'
,
desc
:
'千家vue2.0项目模板,对接了组件库/标准库/用户操作埋点'
,
repo
:
{
url
:
'git@git.allhome.com.cn:panyanan/my-vue-template.git'
,
username
:
''
,
password
:
''
}
},
{
name
:
'vue2
'
,
desc
:
'千家vue2项目模板,对接了组件库/标准库/用户操作埋点'
,
repo
:
'git@git.allhome.com.cn:panyanan/my-vue-template.git'
},
// todo other template
// todo other template
];
];
/**
/**
...
...
src/lib/create.ts
0 → 100644
浏览文件 @
5b57a372
import
{
Templates
,
hasTemplate
}
from
'../config/template.config'
import
*
as
chalk
from
'chalk'
import
*
as
path
from
'path'
import
{
CreateVue2
}
from
'./create_vue2'
export
async
function
create
(
templateName
:
string
,
projectName
:
string
,
options
:
any
)
{
// 验证模板名称
let
requireMessage
=
[];
if
(
!
hasTemplate
(
templateName
))
{
requireMessage
.
push
(
'模板名称不正确'
)
}
// 验证项目名称
if
(
!
projectName
)
{
requireMessage
.
push
(
'缺少项目名'
)
}
if
(
requireMessage
.
length
)
{
console
.
log
(
chalk
.
red
(
requireMessage
.
join
(
' && '
)));
return
;
}
// 项目目录
const
targetDir
=
path
.
join
(
process
.
cwd
(),
projectName
);
// 模板
const
template
=
Templates
.
find
(
({
name
})
=>
name
===
templateName
);
// 不同的框架模板实现各自的创建逻辑
switch
(
templateName
)
{
case
'vue2'
:
const
creator
=
new
CreateVue2
(
template
,
projectName
,
targetDir
);
await
creator
.
create
(
options
);
default
:
}
}
src/lib/create_vue2.ts
0 → 100644
浏览文件 @
5b57a372
import
*
as
ora
from
'ora'
import
{
Git
}
from
'../util/Git'
import
{
Templates
,
Template
}
from
'../config/template.config'
/**
* @date 2019.12.18
* @author panyanan
* @information 创建vue2项目
*/
export
class
CreateVue2
{
// 模板
private
template
:
Template
;
// 项目名称
private
projectName
:
string
;
// 项目目录
private
targetDir
:
string
;
constructor
(
template
:
Template
,
projectName
:
string
,
targetDir
:
string
)
{
this
.
template
=
template
;
this
.
projectName
=
projectName
;
this
.
targetDir
=
targetDir
;
}
create
(
options
:
any
):
void
{
try
{
const
spinner
=
ora
(
'create new a project'
);
spinner
.
start
();
const
git
=
new
Git
(
this
.
template
.
repo
,
this
.
targetDir
);
git
.
pull
();
spinner
.
stop
();
spinner
.
succeed
(
'clone succeed'
);
}
catch
(
error
)
{
console
.
error
(
error
);
}
}
}
\ No newline at end of file
src/lib/listTemplates.ts
浏览文件 @
5b57a372
...
@@ -15,9 +15,9 @@ export default function () {
...
@@ -15,9 +15,9 @@ export default function () {
const
tip
=
`
const
tip
=
`
**********************************************
**********************************************
当你使用create命令时如:
当你使用create命令时如:
${
chalk
.
blueBright
(
'"qj-cli create vue2
.0
hello"'
)}
${
chalk
.
blueBright
(
'"qj-cli create vue2 hello"'
)}
中的
${
chalk
.
blueBright
(
'"vue2
.0"'
)}
就指的是下面框架名: vue2.0
,
中的
${
chalk
.
blueBright
(
'"vue2
"'
)}
就指的是下面框架名: vue2
,
欢迎同学们积极提供框架模板,我们还需要vue2
.0_ts, vue3.0, vue3.0
_ts,node服务框架等等,
欢迎同学们积极提供框架模板,我们还需要vue2
_ts, vue3, vue3
_ts,node服务框架等等,
**********************************************
**********************************************
`
;
`
;
log
(
`
${
chalk
.
green
(
tip
)}
`
);
log
(
`
${
chalk
.
green
(
tip
)}
`
);
...
...
src/test/util/Git.test.ts
浏览文件 @
5b57a372
import
Git
from
'../../util/Git'
import
{
Git
}
from
'../../util/Git'
import
*
as
assert
from
'power-assert'
import
*
as
assert
from
'power-assert'
import
*
as
path
from
'path'
import
*
as
path
from
'path'
import
*
as
spawn
from
'cross-spawn'
import
*
as
spawn
from
'cross-spawn'
...
...
src/util/Git.ts
浏览文件 @
5b57a372
...
@@ -8,7 +8,7 @@ import * as assert from 'power-assert'
...
@@ -8,7 +8,7 @@ import * as assert from 'power-assert'
import
*
as
fs
from
'fs-extra'
import
*
as
fs
from
'fs-extra'
import
*
as
chalk
from
'chalk'
import
*
as
chalk
from
'chalk'
import
*
as
spawn
from
'cross-spawn'
import
*
as
spawn
from
'cross-spawn'
class
Git
{
export
class
Git
{
private
gitURL
:
string
;
// 仓库地址
private
gitURL
:
string
;
// 仓库地址
private
dir
:
string
;
// 拉取或推送的目录
private
dir
:
string
;
// 拉取或推送的目录
constructor
(
gitURL
:
string
,
dir
:
string
)
{
constructor
(
gitURL
:
string
,
dir
:
string
)
{
...
@@ -21,22 +21,15 @@ class Git {
...
@@ -21,22 +21,15 @@ class Git {
* @author panyanan
* @author panyanan
* @information 拉取
* @information 拉取
*/
*/
async
pull
():
Promise
<
boolean
>
{
pull
():
void
{
let
res
=
false
;
// 检测目录是否存在
try
{
const
dirExits
=
fs
.
pathExistsSync
(
this
.
dir
);
// 检测目录是否存在
// 目录存在需要删除,才能clone
const
dirExits
=
await
fs
.
pathExists
(
this
.
dir
);
if
(
dirExits
)
{
// 目录存在需要删除,才能clone
console
.
log
(
`
${
chalk
.
red
(
'
\
n delete '
)}${
this
.
dir
}
`
);
if
(
dirExits
)
{
fs
.
removeSync
(
this
.
dir
);
console
.
log
(
chalk
.
red
(
`delete
${
this
.
dir
}
`
));
await
fs
.
remove
(
this
.
dir
);
}
await
execa
(
'git'
,
[
'clone'
,
this
.
gitURL
,
this
.
dir
]);
res
=
true
;
}
catch
(
error
)
{
assert
.
ok
(
false
,
`拉取
${
this
.
gitURL
}
失败:
${
error
.
message
}
`
);
}
}
return
res
;
execa
.
sync
(
'git'
,
[
'clone'
,
this
.
gitURL
,
this
.
dir
])
;
}
}
/**
/**
* @date 2019.12.17
* @date 2019.12.17
...
@@ -91,5 +84,4 @@ class Git {
...
@@ -91,5 +84,4 @@ class Git {
}
catch
(
error
)
{}
}
catch
(
error
)
{}
return
res
;
return
res
;
}
}
}
}
export
default
Git
;
\ No newline at end of file
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论