inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

cli 질문

해결된 질문

163

이태희

작성한 질문수 18

0

cli 

inquire 를 만들었습니다.

그런데 cli 명령어를 칠 경우 해당명령어가 없다고 나옵니다.

아무래도 소스에서 이부분이 문제가 되고 있는거 같습니다.

if (args) {
            console.log('해당 명령어를 찾을 수 없습니다.');
            program.help();
        }

전체 소스 

#!/usr/bin/env node 
const { program } = require('commander');
const fs = require('fs');
const path = require('path');
const inquirer = require('inquirer');

const htmlTemplate = `
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Template</title>
    </head>
    <body>
        <h1>Hello</h1>
        <p>CLI</p>
    </body>
</html>
`;

const routerTemplate = `
const express = require('express');
const router = express.Router();

router.get('/', (req, res, next) => {
    try {
        res.send('ok');
    } catch (error) {
        console.error(error);
        next(error);
    }
});

module.expores = 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))
        .split(path.sep)
        .filter(p => !!p);
    dirname.forEach((d, idx) => {
        const pathBuilder = dirname.slice(0, idx + 1).join(path.sep);
        if (!exist(pathBuilder)) {
            fs.mkdirSync(pathBuilder);
        }
    });
};

const makeTemplate = (type, name, directory) => { // 템플릿 생성 함수 
    mkdirp(directory);
    if (type === 'html') {
        const pathToFile = path.join(directory, `${name}.html`);
        if (exist(pathToFile)) {
            console.error('이미 해당 파일이 존재합니다.');
        } else {
            fs.writeFileSync(pathToFile, htmlTemplate);
            console.log(pathToFile, '생성 완료');
        }
    } else if (type === 'express-router') {
        const pathToFile = path.join(directory, `${name}.js`);
        if (exist(pathToFile)) {
            console.error('이미 해당 파일이 존재합니다.');
        } else {
            fs.writeFileSync(pathToFile, routerTemplate);
            console.log(pathToFile, '생성 완료');
        }
    } else {
        console.error('html 또는 express-router 둘 중 하나를 입력하세요.');
    }
};

program 
    .version('0.0.1', '-v, --version')
    .name('cli')

program 
    .command('template <type>')
    .usage('<type> -- filename [filename] --path [path]')
    .description('템플릿을 생성합니다.')
    .alias('tmpl')
    .option('-f --filename [filename]', '파일명을 입력하세요', 'index')
    .option('-d --directory [path]', '생성 경로를 입력하세요', '.')
    .action((type, options) => {
        makeTemplate(type, options.filename, options.directory);
    });

program
    .action((cmd, args) => {
        if (args) {
            console.log('해당 명령어를 찾을 수 없습니다.');
            program.help();
        } else {
            inquirer.prompt([{
                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);
                    console.log('터미널을 종료합니다.');
                }
            });
        }
    })
    .parse(process.argv);

Sequelize nodejs mongodb mysql

답변 1

1

제로초(조현영)

commander 버전을 확인해보세요. 제 강좌는 5버전 기준입니다. 현재 7버전 나왔는데 7버전 쓰면 작동하지 않습니다.

리눅스 노드 설치시 패키지

0

159

0

socket.js 에서 referer로부터 roomId를 가져올 때

0

905

3

스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문

0

2281

2

a[title] 질문드립니다

0

375

1

리뉴얼 강의 및 공부 방법

0

581

1

jwt decode

0

1128

1

node.js 교과서 3판 질문드립니다

0

391

1

passport와 jwt

0

432

1

리뉴얼 강의

0

417

2

혹시 Node.js 교과서 3판 이북은 언제 나오나요?

0

353

1

몽고디비 사용자도 MYSQL부분을 들어야 하나요???

0

481

1

sql 쿼리 로그는 어떤 모듈이 작성하나요?

0

505

2

nunjucks res.render('error'); 작동을 안합니다.

0

511

1

질문있습니다.

0

346

1

multer 한글 파일 업로드시 파일명이 깨져요.

1

3535

1

수업자료는 어디있나요?

0

366

1

질문 있습니디

0

235

1

multer 사용시 file 외 name값은 못받나용?

0

416

1

코드 중복 부분 질문드립니다.

0

298

1

api 만드는 이유 질문드립니다.

0

286

1

Strategy의 done에 대해 질문드립니다.

0

361

1

안녕하세요 fs 권한 관련 질문드립니다

0

446

1

시퀄라이즈 연결질문...

0

492

2

res.setHeader vs res.cookie

0

1785

3