티스토리 뷰
728x90
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
#!/usr/bin/env node
const program = require('commander') ;
const fs = require('fs') ;
const path = require('path') ;
const inquirer = require('inquirer') ;
const chalk = require('chalk') ;
const htmlTemplate = `<DOCTYPE html>
<html>
<head>
<meta chart="utf-8" />
<title>Template</title>
</head>
<body>
<h>Hello</h>
<p>CLI</p>
</body>
</html>` ;
const routerTemplate = `const express = require('express') ;
const router = express.Router() ;
try {
res.send('ok') ;
} catch (error) {
console.error(error) ;
next(error) ;
}
}) ;
module.exports = router ; `;
const exist = (dir) => {
try {
fs.accessSync(dir, fs.constants.F_OK | fs.constants.R_OK | fs.constants.W_OK) ;
return true ;
} catch (e) {
return false ;
}
} ;
const mkdirp = (dir) => { // 파일 경로를 만들어 줌
const dirname = path
.relative('.', path.normalize(dir))
dirname.forEach((d, idx) => {
if(!exist(pathBuilder)) {
fs.mkdirSync(pathBuilder) ;
}
}) ;
} ;
const makeTemplate = (type, name, directory) => {
mkdirp(directory) ; //폴더 경로를 생성 사용자가 맨위에 입력한 경로를 받음
if(type === 'html') { //만약 html 템플릿을 만들고자 했으면
const pathToFile = path.join(directory, `${name}.html`) ; //이 파일경로+파일명
if(exist(pathToFile)) {
} else {
fs.writeFileSync(pathToFile, htmlTemplate) ; //한 번만 실행되는 경우에는 Sync 메서드를 써도 되지만, 여러 번 동시에 호출 될 것 같으면 x
}
} else if (type === 'express-router') { //만약 사용자가 라우터를 만들고 싶은 경우
const pathToFile = path.join(directory, `${name}.js`) ;
if (exist(pathFile)) {
} else {
fs.writeFileSync(pathToFile, routerTemplate) ;
}
} else {
}
} ;
const copyFile = (name, directory) => {
if(exist(name)) {
mkdirp(directory) ;
fs.copyFileSync(name, path.join(directory, name)) ;
} else {
}
} ;
const rimraf = (p) => {
if(exist(p)) {
try {
const dir = fs.readdirSync(p) ;
console.log(dir) ;
dir.forEach((d) => {
rimraf(path.join(p, d)) ;
}) ;
fs.rmdirSync(p) ;
console.log(chalk.green(`${p} 폴더를 삭제했습니다.`)) ;
} catch (e) {
fs.unlinkSync(p) ;
console.log(chalk.green(`${p} 파일을 삭제했습니다.`)) ;
}
} else {
}
} ;
let triggered = false ; //밑에 action실행 되었으면 트리거들을 툴로 만들 것
program
.version('0.0.1', '-v, --version' )
.usage('[option]') ;
program
.command('template <type>')
.usage('--name <name> --path [path]')
.description('템플릿을 생성합니다.')
.alias('tmpl') //템플릿 명령어
.option('-n, --name <name>', '파일명을 입력하세요 : ', 'index')
.option('-d, --directory [path]', '생성 경로를 입력하세요 : ', '.')
.action((type, options) => {
makeTemplate(type, option.name, option.directory) ;
trigger = true ; //action이 실행되었으면 inquiredrk vlfdydjqtek
}) ;
program
.command('copy <name> <directory>')
.usage('<name> <directory>')
.description('파일을 복사합니다')
.alias('cp')
.action((name, directory) => {
copyFile(name, directory) ;
triggered = true ;
}) ;
program
.command('rimraf <dpath>')
.usage('<path>')
.description('지정한 경로와 그 아래 파일/폴더를 지웁니다.')
.action((path) => {
rimraf(path) ;
triggered = true ;
}) ;
program
.command('*', { noHelp: true })
.action(() => {
console.log('해당 명령어를 찾을 수 없습니다!!') ;
trigger = true ;
}) ;
program
.parse(process.argv) ;
if(!triggered) {
type: 'list',
name: 'type',
message: '템플릿 종류를 선택하세요' ,
choices: ['html', 'express-router'],
}, {
type: 'input',
name: 'name',
message: '파일의 이름을 입력하세요.',
default: 'index',
}, {
type: 'input',
name: 'directory',
message: '파일이 위치할 폴더의 경로를 입력하세요.',
default: '.',
}, {
type: 'confirm',
name: 'confirm',
message: '생성하시겠습니까 ?',
}])
.then((answers) => { //질문에 대한 답들
if(answers.confirm) {
makeTemplate(answers.type, answers.name, answers.directory) ;
}
})
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5; text-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs |
'프로그래밍 > Node.js' 카테고리의 다른 글
Node.js) inquirer & chalk 사용 (0) | 2019.05.13 |
---|---|
Node.js) CLI 프로그램 - 4 (0) | 2019.05.10 |
Node.js) CLI 프로그램 -2 (0) | 2019.05.07 |
Node.js) CLI 프로그램 - 1 (0) | 2019.05.07 |
Node.js) Express 미들웨어 4 (라우터를 분리하는 방법) (0) | 2019.04.26 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬
- 신입사원개발자
- 초보개발자
- npm이란
- ORACLE MERGE INTO USING DUAL
- 단일쿼리문
- 백준
- java1.7 다운
- merge into using dual
- 신입개발자퇴사
- ORACLE MERGE INTO 동일테이블
- C++
- npm init
- merge into using
- 알고리즘
- 백준알고리즘
- ORACLE 단일테이블
- jdk 이전버전 다운
- Java
- package.json
- 개발자퇴사
- 개발자
- 자바
- 인스턴스
- 신입사원
- merge into 단일테이블
- ORACLE MERGE INTO 같은테이블
- merge into 같은 테이블
- jdk1.7 다운
- merge into
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함