/
index.js
116 lines (105 loc) · 2.35 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const fs = require("fs");
const path = require('path');
/**
* Files name list in some folder
* @return {Array}
*/
function getFilesname () {
// 读取 .svg 文件
let files = []
let dirs = []
travel('svg', dirs, function(pathname) {
files.push(pathname)
})
return files.filter(function (file) {
return /.svg$/.test(file)
});
}
/**
* Traversal folder
* @param {String} dir
* @param {Function} callback
*/
function travel (dir, dirs, callback) {
fs.readdirSync(dir).forEach(function (file) {
var pathname = path.join(dir, file);
if (fs.statSync(pathname).isDirectory()) {
dirs.unshift(pathname)
travel(pathname, dirs, callback);
} else {
callback(pathname);
}
});
}
/**
* Check folder and mkdir
* @param {String} fileName
* @param {Number} fromIndex
*/
function check (fileName, fromIndex) {
var index = fileName.indexOf('\/', fromIndex)
if (index !== -1) {
var folderName = fileName.slice(0, index)
if (!fs.existsSync(`js/${folderName}/`)) {
fs.mkdirSync(`js/${folderName}`,0744);
}
check(fileName, index + 1);
} else {
return
}
}
/**
* Parse file, get path node in svg xml, return paths
* @param {String} fileName
* @return {String}
*/
function parseFile (fileName) {
let text = fs.readFileSync(fileName, 'utf8')
text = text.slice(text.indexOf('\<svg'), text.indexOf('\<\/svg\>') + 6)
text = text.replace(/[\r\n]/g, '')
return 'export default \''+text+'\''
}
/**
* Write js to file
* @param {String} fileName
* @param {String} js
*/
function writeFile (fileName, js) {
fileName = fileName.replace(/.svg$/, '.js').slice(4)
check(fileName, 0)
fs.open(`js/${fileName}`, 'a', function (err, fd) {
fs.writeFile(fd, js, err => {
console.log(`${fileName} 创建成功`)
})
})
}
/**
* Empty './js' Folder
*/
function empty () {
if (fs.existsSync('js')) {
let dirs = []
travel('js', dirs, function(pathname) {
fs.unlinkSync(pathname)
})
for (let i = 0; i < dirs.length; i ++) {
fs.rmdirSync(dirs[i])
}
}
}
/**
* Handle svg file to write js
*/
function handleSvgFile () {
const files = getFilesname()
if (!fs.existsSync('js')) {
fs.mkdirSync('js',0744);
}
files.forEach(fileName => {
const js = parseFile(fileName)
writeFile(fileName, js)
})
console.log('完成')
}
empty()
handleSvgFile()