JavaScript 및 Oclif를 사용한 뛰어난 CLI 구축
CLI 를 먼저 정의해 보겠습니다.
물론 빠른 구글 검색은 CLI 정의가 있는 Wikipedia article을 생성합니다.
A command-line interface or command language interpreter (CLI), also known as command-line user interface, console user interface and character user interface (CUI), is a means of interacting with a computer program where the user (or client) issues commands to the program in the form of successive lines of text (command lines). A program which handles the interface is called a command language interpreter or shell (computing).
따라서 CLI는 사용자가 텍스트로 요청한 내용을 이해하고 요청에 따라 코드를 실행하는 프로그램입니다.
이러한 프로그램은 현재 월의
cal
Bash 도구 등 간단한 CLI부터 Kubernetes 클러스터를 관리하는 kubectl
등 매우 복잡한 CLI까지 다양한 용례에 매우 유용하다.매일 CLI를 직접 사용하지 않아도 간접적으로 영향을 받을 수 있다. 예를 들어
git
은 CLI이고 gcc
은 GNU 컴파일러이며 create-react-app
은 React 응용 프로그램을 만드는 비계 CLI 등이다.자체 CLI 설정 방법
과학기술계의 많은 일들처럼 답은'상황을 보고 정해야 한다'는 것이다.그것들을 구축하는 방법은 매우 많고, 모든 방법은 서로 다른 환경에서 효과적일 수 있다.이 예에서는 JavaScript와 Oclif: a Node.JS Open CLI Framework (by Heroku)을 사용하여 CLI 구축을 위한 CLI를 포함한 어플리케이션을 구축하는 방법을 모색합니다.🤔.
위태롭다
지금부터 자바스크립트와 NPM 생태계가 전체적으로 만족스럽다고 가정해 보겠습니다. 만약 만족스럽지 않다면 대체적인 생각이 있을 수 있지만, 시작하기 전에 이 방면에 관한 내용을 읽어보시기 바랍니다.😃.
Oclif 시작
내가 보기에 일부 물건을 구축하는 것은 보통 좋은 학습 방식이다. 그래서 본 예에서 나는 두뇌 폭풍을 일으켰고'해방자배'CLI(see Wikipedia)를 구축하기로 결정했다.
해방자배 선수권대회가 이미 진행된 경기와 곧 진행될 경기에 대한 정보를 검색하고 표시할 수 있는 명령을 제공하겠다는 생각이다.
우리 시작합시다!
Oclif CLI에는 CLI 프로젝트를 생성하는 두 가지 방법이 있는데, 하나는
npx oclif single mynewcli
이고, 다른 하나는 npx oclif multi mynewcli
이며, 이 예에서는 다중 명령 CLI를 생성합니다.명령이 Oclif의 다중 명령 CLI 생성과 일치하는
libertadores games:all
, libertadores games:past
으로 표시되기를 원합니다.프로젝트 초기화
먼저 다음과 같은 작업을 통해 프로젝트를 초기화합니다.
npx oclif multi libertadores-cli
이것은 몇 가지 질문을 할 것이다. 그리고 인코딩을 시작해야 할 모든 것을 설치할 것이다.$ npx oclif multi libertadores
npx: installed 442 in 32.454s
_-----_ ╭──────────────────────────╮
| | │ Time to build a │
|--(o)--| │ multi-command CLI with │
`---------´ │ oclif! Version: 1.13.1 │
( _´U`_ ) ╰──────────────────────────╯
/___A___\ /
| ~ |
__'.___.'__
´ ` |° ´ Y `
? npm package name libertadores-cli
? command bin name the CLI will export libertadores
? description A simple CLI to get information about "Copa Libertadores" right in your terminal
? author Federico Kauffman
? version 0.0.0
? license MIT
? Who is the GitHub owner of repository (https://github.com/OWNER/repo) streaver
? What is the GitHub name of repository (https://github.com/owner/REPO) libertadores-cli
? Select a package manager yarn
? TypeScript No
? Use eslint (linter for JavaScript) Yes
? Use mocha (testing framework) Yes
? Add CI service config circleci (continuous integration/delivery service)
나는 내가 좋아하는 기본 설정을 선택했다. 현재 너는 한 무더기의 파일과 폴더가 있는데, 그것들은 우리 프로젝트의 주요 구조가 될 것이다.다음은 디렉토리를 libertadores games:upcoming
으로 입력합니다.Oclif가 제공하는 이점에 대해 간략하게 설명합니다.
.
├── README.md
├── bin
│ ├── run
│ └── run.cmd
├── package.json
├── src
│ ├── commands
│ │ └── hello.js
│ └── index.js
├── test
│ ├── commands
│ │ └── hello.test.js
│ └── mocha.opts
└── yarn.lock
5 directories, 9 files
파일 트리를 보면 각 플랫폼(Unix/Windows)에서 명령을 실행하는 바이너리 파일이 포함된 cd libertadores-cli
디렉토리를 볼 수 있습니다.bin
폴더에 있는 src
파일을 볼 수 있습니다. 이 파일은 내부 Oclif 패키지만 내보냅니다. 이 패키지는 사용 가능한 명령을 불러옵니다. 이 명령은 index.js
폴더에 있는 파일에서 정의됩니다.기본적으로 Oclif는 src/commands
명령을 생성하여 실행하고 다음을 확인합니다.$ ./bin/run
A simple CLI to get information about "Copa Libertadores" right in your terminal
VERSION
libertadores-cli/0.0.0 darwin-x64 node-v11.13.0
USAGE
$ libertadores [COMMAND]
COMMANDS
hello Describe the command here
help display help for libertadores
hello
하위 명령을 실행하면 다음이 적용됩니다.$ ./bin/run hello
hello world from ./src/commands/hello.js
마지막으로 가장 중요하지 않은 것은 hello
폴더가 있는데 그 안에 모든 테스트를 설치할 것입니다. 사실 Oclif는 몇 가지 테스트를 만들었습니다. 우리는 tests
또는 npm run test
을 사용해서 실행할 수 있습니다.첫 번째 명령 만들기
우선, 우리는
yarn test
명령을 삭제할 수 있다. 왜냐하면 우리는 그것을 사용할 생각이 없기 때문에, hello
과 src/command/hello.js
만 삭제할 수 있다.이제 Oclif CLI 생성기 명령을 사용하여
tests/commands/hello.test.js
명령을 생성할 수 있습니다.npx oclif command games:all
이것은 명령에 필요한 모든 파일(테스트 포함)을 만들고 games:all
파일을 자동으로 업데이트하여 새로운 명령을 포함합니다.http://www.conmebol.com/es/copa-libertadores-2019/fixture에서 "Copa Aducturator"에 대한 자세한 내용은 puppeteer을 사용하여 웹 사이트에 접속하여 데이터를 확인할 수 있습니다.
$ yarn add puppeteer --save
const puppeteer = require("puppeteer");
...
class AllCommand extends Command {
async run() {
...
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(
"http://www.conmebol.com/es/copa-libertadores-2019/fixture",
{ waitUntil: "load", timeout: 0 }
);
// Insert some really crazy code to parse the HTML
// you can find this at https://github.com/streaver/libertadores-cli
this.log(results);
}
}
이제 README.md
을 실행하여 최종 결과를 얻을 수 있습니다.보시다시피 저는 '불러오기' 기능을 추가해서 사용자에게 시각적 피드백을 제공합니다.이를 추가하기 위해
libertadores games:all
패키지를 설치한 다음 코드의 느린 부분을 일부 부팅/정지 호출에 포장합니다.다음과 같이 설치합니다.
yarn add cli-ux --save
다음과 같은 마이크로스피커를 추가합니다.const { cli } = require('cli-ux');
...
cli.action.start('Fetching data');
//Do something that takes time
cli.action.stop();
...
이제 CLI가 생겨서 테스트를 작성할 수 있습니다!Oclif는 이러한 CLI를 테스트하는 데 유용한 기본값을 제공합니다.이런 특수한 상황에서 터미널의 출력이 예상에 부합되는지 테스트하기만 하면 됩니다.다행히도 이것은 자동으로 생성된 명령 테스트입니다. 코드를 수정하기만 하면 됩니다.나는 이 임무를 너에게 남겨 줄 것이다. (독자, 수학책처럼)🙄...또는 official repository에서 해방자배 CLI를 볼 수도 있습니다.
CLI를 설치하여 게임을 놓치지 않도록 최신 상태로 유지❤️⚽!
Reference
이 문제에 관하여(JavaScript 및 Oclif를 사용한 뛰어난 CLI 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fedekau/building-awesome-clis-with-javascript-and-oclif-291o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)