Skip to content

Commit 199fcac

Browse files
committed
feat(scripts): add generate scripts
1 parent c80c839 commit 199fcac

File tree

6 files changed

+231
-2
lines changed

6 files changed

+231
-2
lines changed

.prettierrc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
"singleQuote": true,
33
"semi": false,
44
"printWidth": 200,
5-
"trailingComma": "none"
5+
"trailingComma": "none",
6+
"arrowParens": "always"
67
}

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
"dev": "npm run lint & vue-cli-service serve",
99
"serve": "vue-cli-service serve",
1010
"build": "vue-cli-service build",
11-
"lint": "vue-cli-service lint"
11+
"lint": "vue-cli-service lint",
12+
"new:view": "node ./scripts/generateView/index",
13+
"new:comp": "node ./scripts/generateComponent/index"
1214
},
1315
"dependencies": {
1416
"vue": "^2.6.6",

scripts/generateComponent/index.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// index.js`
2+
const chalk = require('chalk')
3+
const path = require('path')
4+
const fs = require('fs')
5+
const resolve = (...file) => path.resolve(__dirname, ...file)
6+
const log = message => console.log(chalk.green(`${message}`))
7+
const successLog = message => console.log(chalk.blue(`${message}`))
8+
const errorLog = error => console.log(chalk.red(`${error}`))
9+
const {
10+
vueTemplate
11+
} = require('./template')
12+
13+
const generateFile = (path, data) => {
14+
if (fs.existsSync(path)) {
15+
errorLog(`${path}文件已存在`)
16+
return
17+
}
18+
return new Promise((resolve, reject) => {
19+
fs.writeFile(path, data, 'utf8', err => {
20+
if (err) {
21+
errorLog(err.message)
22+
reject(err)
23+
} else {
24+
resolve(true)
25+
}
26+
})
27+
})
28+
}
29+
log('请输入要生成的组件名称、如需生成全局组件,请加 global/ 前缀')
30+
let componentName = ''
31+
process.stdin.on('data', async chunk => {
32+
const inputName = String(chunk).trim().toString()
33+
/**
34+
* 组件目录路径
35+
*/
36+
const componentDirectory = resolve('../../src/components', inputName)
37+
38+
/**
39+
* vue组件路径
40+
*/
41+
const componentVueName = resolve(componentDirectory, 'index.vue')
42+
43+
const hasComponentDirectory = fs.existsSync(componentDirectory)
44+
if (hasComponentDirectory) {
45+
errorLog(`${inputName}组件目录已存在,请重新输入`)
46+
return
47+
} else {
48+
log(`正在生成 component 目录 ${componentDirectory}`)
49+
await dotExistDirectoryCreate(componentDirectory)
50+
// fs.mkdirSync(componentDirectory);
51+
}
52+
try {
53+
if (inputName.includes('/')) {
54+
const inputArr = inputName.split('/')
55+
componentName = inputArr[inputArr.length - 1]
56+
} else {
57+
componentName = inputName
58+
}
59+
log(`正在生成 vue 文件 ${componentVueName}`)
60+
await generateFile(componentVueName, vueTemplate(componentName))
61+
successLog('生成成功')
62+
} catch (e) {
63+
errorLog(e.message)
64+
}
65+
66+
process.stdin.emit('end')
67+
})
68+
process.stdin.on('end', () => {
69+
log('exit')
70+
process.exit()
71+
})
72+
73+
function dotExistDirectoryCreate (directory) {
74+
return new Promise((resolve) => {
75+
mkdirs(directory, function () {
76+
resolve(true)
77+
})
78+
})
79+
}
80+
81+
// 递归创建目录
82+
function mkdirs (directory, callback) {
83+
var exists = fs.existsSync(directory)
84+
if (exists) {
85+
callback()
86+
} else {
87+
mkdirs(path.dirname(directory), function () {
88+
fs.mkdirSync(directory)
89+
callback()
90+
})
91+
}
92+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// template.js
2+
module.exports = {
3+
vueTemplate: compoenntName => {
4+
return `<template>
5+
<div class="${compoenntName}">
6+
${compoenntName}组件
7+
</div>
8+
</template>
9+
<script>
10+
export default {
11+
name: '${compoenntName}',
12+
data () {
13+
return {}
14+
},
15+
methods: {}
16+
}
17+
</script>
18+
<style lang="scss" scoped>
19+
20+
</style>
21+
`
22+
}
23+
}

scripts/generateView/index.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
i// index.js
2+
const chalk = require('chalk')
3+
const path = require('path')
4+
const fs = require('fs')
5+
const resolve = (...file) => path.resolve(__dirname, ...file)
6+
const log = message => console.log(chalk.green(`${message}`))
7+
const successLog = message => console.log(chalk.blue(`${message}`))
8+
const errorLog = error => console.log(chalk.red(`${error}`))
9+
// 导入模板
10+
const {
11+
vueTemplate
12+
} = require('./template')
13+
// 生成文件
14+
const generateFile = (path, data) => {
15+
if (fs.existsSync(path)) {
16+
errorLog(`${path}文件已存在`)
17+
return
18+
}
19+
return new Promise((resolve, reject) => {
20+
fs.writeFile(path, data, 'utf8', err => {
21+
if (err) {
22+
errorLog(err.message)
23+
reject(err)
24+
} else {
25+
resolve(true)
26+
}
27+
})
28+
})
29+
}
30+
log('请输入要生成的页面组件名称、会生成在 views/目录下')
31+
let componentName = ''
32+
process.stdin.on('data', async chunk => {
33+
// 组件名称
34+
const inputName = String(chunk).trim().toString()
35+
// Vue页面组件路径
36+
const componentPath = resolve('../../src/views', inputName)
37+
// vue文件
38+
const vueFile = resolve(componentPath, 'index.vue')
39+
// 判断组件文件夹是否存在
40+
const hasComponentExists = fs.existsSync(componentPath)
41+
if (hasComponentExists) {
42+
errorLog(`${inputName}页面组件已存在,请重新输入`)
43+
return
44+
} else {
45+
log(`正在生成 component 目录 ${componentPath}`)
46+
await dotExistDirectoryCreate(componentPath)
47+
}
48+
try {
49+
// 获取组件名
50+
if (inputName.includes('/')) {
51+
const inputArr = inputName.split('/')
52+
componentName = inputArr[inputArr.length - 1]
53+
} else {
54+
componentName = inputName
55+
}
56+
log(`正在生成 vue 文件 ${vueFile}`)
57+
await generateFile(vueFile, vueTemplate(componentName))
58+
successLog('生成成功')
59+
} catch (e) {
60+
errorLog(e.message)
61+
}
62+
63+
process.stdin.emit('end')
64+
})
65+
process.stdin.on('end', () => {
66+
log('exit')
67+
process.exit()
68+
})
69+
70+
function dotExistDirectoryCreate (directory) {
71+
return new Promise((resolve) => {
72+
mkdirs(directory, function () {
73+
resolve(true)
74+
})
75+
})
76+
}
77+
// 递归创建目录
78+
function mkdirs (directory, callback) {
79+
var exists = fs.existsSync(directory)
80+
if (exists) {
81+
callback()
82+
} else {
83+
mkdirs(path.dirname(directory), function () {
84+
fs.mkdirSync(directory)
85+
callback()
86+
})
87+
}
88+
}

scripts/generateView/template.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// template.js
2+
module.exports = {
3+
vueTemplate: compoenntName => {
4+
return `<template>
5+
<div class="${compoenntName}">
6+
${compoenntName}组件
7+
</div>
8+
</template>
9+
<script>
10+
export default {
11+
name: '${compoenntName}',
12+
data () {
13+
return {}
14+
},
15+
methods: {}
16+
}
17+
</script>
18+
<style lang="scss" scoped>
19+
20+
</style>
21+
`
22+
}
23+
}

0 commit comments

Comments
 (0)