0 부터 개인 전용 명령 행 도구 모음 만 들 기-yargs 완전 가이드
명령 행 프로그램 을 사용 하 는 것 은 프로그래머 에 게 흔 하 다.전단 엔지니어 나 gui 를 개발 하 더 라 도 명령 행 을 사용 하여 프로그램 이나 포장 프로그램 을 컴 파일 해 야 한다.
명령 행 도 구 를 능숙 하 게 사용 하면 개발 효율 을 크게 향상 시 킬 수 있 습 니 다.Liux 가 가지 고 있 는 명령 행 도 구 는 모두 매우 유용 합 니 다.그러나 이런 도 구 는 모두 일반적인 수요 에 따라 개 발 된 것 입 니 다.특별한 수요 가 있 으 면 스스로 스 크 립 트 를 써 서 이름 을 대량으로 바 꾸 고 파일 내용 을 대량으로 바 꾸 는 등 작업 효율 을 제공 해 야 합 니 다.
node.js 가 나 오기 전에 python 은 스 크 립 트 를 개발 하여 특수 한 임 무 를 수행 하 는 데 자주 사용 되 었 습 니 다.예 를 들 어 python 파충류,python 과 관련 된 튜 토리 얼 이 많 고 관심 이 있 는 자신 구 글 입 니 다.
node.js 의 비동기 io 특성 덕분에 node 개발 io 밀집 류 임 무 는 매우 간단 해 졌 습 니 다.이 글 은 node.js 의 yargs 모듈 을 어떻게 사용 하여 자신의 명령 행 도구 집합 을 개발 하 는 지 알려 드 립 니 다.
명령 행 매개 변수 분석
yargs 는 npm 모듈 에서 명령 행 매개 변수 분석 을 완성 하 는 데 사 용 됩 니 다.셸 을 사용 하여 명령 행 을 개발 하 는 시대 로 돌아 갑 니 다.getopts 는 1 세대 명령 행 매개 변수 분석 도구 입 니 다.
shell => python => node.js
의 교 체 를 거 쳐 명령 행 매개 변수 분석 프로그램 은 크게 진화 되 지 않 았 습 니 다.그들의 항목 은 항상 사용자 가 명령 행 에서 들 어 오 는 매개 변 수 를 지정 한 형식 으로 해석 하여 프로그램 이 사용 할 수 있 도록 합 니 다.큰 변 화 는 없 지만 명령 행 매개 변수 분석 모듈 을 개발 하 는 것 이 간단 하기 때문에 현재 node 커 뮤 니 티 에는 yargs 와 유사 한 오픈 소스 프로젝트 가 많이 존재 합 니 다.여기 서 간단하게 열거 하고 관심 있 는 것 은 스스로 알 아 보고 자신 이 좋아 하 는 항목 을 선택 하여 사용 할 수 있 습 니 다.
완 일 봉 의 Node.js 명령 행 프로그램 개발 튜 토리 얼 을 읽 은 후 Yrgs 를 사용 하여 자신의 명령 행 도 구 를 개발 하기 시 작 했 습 니 다.시간 이 지나 면 매우 좋 은 것 을 알 게 되 었 습 니 다.
완 대신 의 글 이 발 표 된 이래 yargs 는 약간의 변경 이 있 었 고 많은 유용 한 기능 을 추가 했다.특히
.commandDir(directory, [opts])
이 기능 은 명령 행 도구 집합 을 만 드 는 데 매우 유용 하기 때문에 새로운 버 전의 yargs 튜 토리 얼 을 쓰 는 것 이 필요 하 다.yargs 의 용법 은 비교적 간단 한 편 입 니 다.영어 에 자신 이 있 는 사람 은 첫 페이지 에서 원판 을 읽 을 수 있 습 니 다:yargs
단순 모드
yargs 는 기본적으로 두 개
--
를 매개 변수 접두사 로 사용 하고 중간 에 빈 칸 이나=
을 사용 할 수 있 습 니 다.아래 코드 는 yargs 의 가장 간단 한 용법 을 보 여 줍 니 다.yargs 만 도입 하면 명령 행 인 자 를 읽 을 수 있 습 니 다.어떠한 설정 도 쓸 필요 가 없습니다.매우 간단 합 니 다.
#!/usr/bin/env node
var argv = require('yargs').argv;
if (argv.ships > 3 && argv.distance < 53.5) {
console.log('Plunder more riffiwobbles!');
} else {
console.log('Retreat from the xupptumblers!');
}
$ ./plunder.js --ships=4 --distance=22
Plunder more riffiwobbles!
$ ./plunder.js --ships 12 --distance 98.7
Retreat from the xupptumblers!
예제 코드 는 모두 홈 페이지 에서 왔 습 니 다:yargs
간단 한 모드 에서 짧 은 변 수 를 읽 을 수 있 습 니 다.예 를 들 어
-x 4
는argv.x = 4
에 해당 합 니 다.간단 한 모드 에서 불 형식 을 읽 을 수 있 습 니 다
-s
는argv.s = true
에 해당 합 니 다.간단 한 모드 에 서 는 비
-
시 작 된 변 수 를 읽 을 수 있 습 니 다.이러한 유형의 변 수 는argv._
배열 에 저 장 됩 니 다.매개 변수 설정
간단 한 모드 의 기능 은 모두 한 줄 의 코드 로 만 실현 할 수 있다.
var argv = require('yargs').argv;
그러나 변수 가 나타 나 는 횟수 를 통계 하려 면 어떻게 합 니까?정 답 은 매개 변수 설정 옵션 을 추가 하 는 것 입 니 다.
#!/usr/bin/env node
var argv = require('yargs')
.count('verbose')
.alias('v', 'verbose')
.argv;
VERBOSE_LEVEL = argv.verbose;
function WARN() { VERBOSE_LEVEL >= 0 && console.log.apply(console, arguments); }
function INFO() { VERBOSE_LEVEL >= 1 && console.log.apply(console, arguments); }
function DEBUG() { VERBOSE_LEVEL >= 2 && console.log.apply(console, arguments); }
WARN("Showing only important stuff");
INFO("Showing semi-important stuff too");
DEBUG("Extra chatty mode");
위의 프로그램 은
verbose
매개 변수 가 나타 난 횟수 를 통계 할 수 있 고 줄 임 말-v
도 통계 할 수 있 으 며 구체 적 인 호출 예 는 아래 의 코드 를 참고 한다.$ node count.js
Showing only important stuff
$ node count.js -v
Showing only important stuff
Showing semi-important stuff too
$ node count.js -vv
Showing only important stuff
Showing semi-important stuff too
Extra chatty mode
$ node count.js -v --verbose
Showing only important stuff
Showing semi-important stuff too
Extra chatty mode
yargs 는 명령 행 프로그램 을 보완 하 는 데 많은 인 터 페 이 스 를 제공 합 니 다.
제시 용법
var argv = require('yargs')
.usage('Usage: $0 -w [num] -h [num]')
.argv;
필수 매개 변수
#!/usr/bin/env node
var argv = require('yargs')
.usage('Usage: $0 -w [num] -h [num]')
.demand(['w','h'])
.argv;
매개 변수 기본 값 제공
#!/usr/bin/env node
var argv = require('yargs')
.default('x', 10)
.default('y', 10)
.argv
;
console.log(argv.x + argv.y);
도움말 정보 인쇄
#!/usr/bin/env node
var argv = require('yargs')
.usage('Usage: $0 [options]')
.help('h')
.alias('h', 'help')
.epilog('copyright 2015')
.argv;
별명 사용
var argv = require('yargs')
.usage('Usage: $0 [options]')
.alias('h', 'help')
.argv;
방문
argv.h
은 방문argv.help
에 해당 합 니 다.매개 변수 배열
var argv = require('yargs')
.usage('Usage: $0 [options]')
.alias('n', 'name')
.array('n')
.argv;
console.log(argv.n);
호출
node array_test.js -n abc test
매개 변수 범위 설정
var argv = require('yargs')
.alias('i', 'ingredient')
.describe('i', 'choose your sandwich ingredients')
.choices('i', ['peanut-butter', 'jelly', 'banana', 'pickles'])
.help('help')
.argv
상기 코드 설정
argv.i
의 값 은['peanut-butter', 'jelly', 'banana', 'pickles']
배열 중의 하나 일 수 있 습 니 다.위 는 yargs 의 비교적 간단 한 용법 입 니 다.전체 판 을 읽 으 려 면 github 에서 읽 는 것 을 권장 합 니 다.
하위 명령
yargs 가 복잡 한 명령 행 프로그램 을 개발 하기에 적합 한 또 다른 이 유 는 하위 명령 을 지원 하고 하위 명령 을 끼 워 넣 을 수 있 기 때 문 입 니 다.이것 은 git 와 같은 수백 개의 명령 을 가 진 프로그램 을 열 수 있다 는 것 을 의미 합 니 다.
yargs 의 하위 명령 은 두 가지 모드 가 있 습 니 다.
.command(*)
과.commandDir(directory, [opts])
.command .command
방법 은 세 개의 인터페이스 가 있다..command(cmd, desc, [builder], [handler])
.command(cmd, desc, [module])
.command(module)
사실 이들 의 용법 은 차이 가 많 지 않 습 니 다.이 모듈 은 모두 하나의 모듈 을 yargs 에 전달 하 는 것 으로 볼 수 있 습 니 다.이 모듈 은 네 개의 변 수 를 내 보 내야 합 니 다
cmd, desc [builder], [handler]
.그 중에서 builder 와 handler 는 방법 이 고 다른 두 개 는 문자열 입 니 다.첫 번 째 인 터 페 이 스 를 사용 하 는 예제
yargs
.command(
'get',
'make a get HTTP request',
function (yargs) {
return yargs.option('u', {
alias: 'url',
describe: 'the URL to make an HTTP request to'
})
},
function (argv) {
console.log(argv.url)
}
)
.help()
.argv
세 번 째 인 터 페 이 스 를 사용 하려 면 이 모듈 을 단독 파일 에 두 고 require 로 도입 해 야 합 니 다.
모듈 코드 입 니 다.
// my-module.js
exports.command = 'get [proxy]'
exports.describe = 'make a get HTTP request'
exports.builder = {
banana: {
default: 'cool'
},
batman: {
default: 'sad'
}
}
exports.handler = function (argv) {
// do something with argv.
}
도입 할 때 이렇게 사용 해 요.
yargs.command(require('my-module'))
.help()
.argv
추가 모듈 이 cmd 와 desc 를 정의 하지 않 았 을 때 두 번 째 인 터 페 이 스 를 사용 할 수 있 습 니 다.
yargs.command('get [proxy]', 'make a get HTTP request', require('my-module'))
.help()
.argv
여기 서 세 번 째 인 터 페 이 스 를 사용 하 는 것 을 권장 합 니 다.이렇게 하면 모듈 의 내부 집적 을 유지 할 수 있 습 니 다.이 모듈 은 어떤 명령 아래 에 마 운 트 할 수 있 습 니 다.이동 할 때 모듈 코드 를 수정 하지 않 고 모듈 을 도입 하 는 코드 만 수정 하면 실 현 될 수 있 습 니 다.
.commandDir
만약 에 대량의 명령 이 위의
.command(module)
를 사용 하여 개발 된다 면 이 모듈 들 은 모두 같은 구 조 를 가지 고 있 기 때문에 이 명령 의 도입 과정 을 간소화 하고 이 과정 을 자동화 할 수 있 는 방법 이 있 을 것 이다.이 를 바탕 으로 yargs 는.commandDir
인 터 페 이 스 를 제공 했다.다음은 제 가 쓴 프로젝트 pit 를 참고 하 겠 습 니 다.
다음은 이 항목 의 디 렉 터 리 구조 입 니 다.
.
├── pit
│ ├── douban
│ │ └── movie.js
│ ├── douban.js
│ ├── gg
│ │ ├── client.js
│ │ ├── login.js
│ │ ├── scope.js
│ │ ├── scope.json
│ │ ├── secret.json
│ │ ├── token.json
│ │ └── upload.js
│ ├── gg.js
│ ├── git
│ │ ├── commit.js
│ │ ├── create.js
│ │ ├── deploy.js
│ │ ├── push.js
│ │ └── token.json
│ ├── git.js
│ ├── gm.js
│ ├── md5.js
│ ├── news
│ │ ├── bing.js
│ │ ├── funs.js
│ │ ├── funs.json
│ │ ├── games.js
│ │ ├── games.json
│ │ ├── google.js
│ │ ├── newsall.json
│ │ ├── shops.js
│ │ ├── shops.json
│ │ ├── videos.js
│ │ └── videos.json
│ └── news.js
└── pit.js
pit.js:명령 행 입구
#!/usr/bin/env node
require('yargs')
.commandDir('pit')
.demand(1)
.help()
.locale('en')
.showHelpOnFail(true, 'Specify --help for available options')
.argv
이 코드 는 같은 디 렉 터 리 의 같은 이름 의 폴 더
pit
를 읽 는 명령 만 하위 명령 으로 불 러 옵 니 다.메모:commandDir 기본 값 은 디 렉 터 리 의 다음 단계 파일 만 불 러 옵 니 다.다시 불 러 오 려 면 이렇게 써 야 합 니 다
.commandDir('pit', {recurse: true})
이 어 git 하위 명령 을 살 펴 보 겠 습 니 다.git 프로젝트 는 제출 할 때마다 같은 절 차 를 반복 하기 때문에 더 간단 한 명령 을 개발 하여 포장 제출 하려 고 합 니 다.git.js
exports.command = 'git ';
exports.desc = 'github command list';
exports.builder = function (yargs) {
return yargs.commandDir('git')
}
exports.handler = function (argv) {}
git 도 디 렉 터 리 를 자신의 하위 명령 으로 불 러 옵 니 다:commt 를 예 로 들 면
commit.js
'use strict';
var fs = require('fs');
var path = require('path');
require('shelljs/global');
var Q = require('q');
function _exec(cmd) {
var deferred = Q.defer();
exec(cmd, function (code, stdout, stderr) {
deferred.resolve();
});
return deferred.promise;
}
exports.command = 'commit';
exports.desc = 'commit repo local';
exports.builder = function (yargs) {
return yargs
.help('h');
};
exports.handler = function (argv) {
var repo = process.cwd();
var name = path.basename(repo);
Q.fcall(function () { })
.then(() => _exec(`git add .`))
.then(() => _exec(`git commit -m 'd'`))
.catch(function (err) {
console.log(err);
})
.done(() => {
console.log(`commit ${repo} done`);
});
}
이 명령 은 기본적으로 git 프로젝트 의 루트 디 렉 터 리 에서 실 행 됩 니 다.git 명령 과 달리 git 는 프로젝트 루트 디 렉 터 리 의 임의의 하위 디 렉 터 리 에서 실 행 될 수 있 습 니 다.
셸 js 를 사용 하여 하위 명령 을 실행 한 다음 Q 로 promise 패 키 징 을 하여 명령 의 실행 순 서 를 확보 하 는 동시에 명령 행 출력 과 오류 정 보 를 제어 에 인쇄 합 니 다.
시간 을 절약 할 수 있 는 간단 한 명령 행 프로그램
뻗다
고 수 는 모두 명령 행 을 잘 사용 합 니 다.(영화 속 의 고수 도 마찬가지 입 니 다)명령 행 을 사용 하여 일상적인 임 무 를 완성 하 는 것 에 습관 이 되면 점점 의존 하 게 됩 니 다.계속 하면 모든 일 을 명령 행 에 사용 하 는 것 을 고려 할 것 입 니 다.물론 이 목적 은 실현 되 지 않 습 니 다.모든 임 무 를 자동 으로 수행 할 수 있 는 명령 행 을 명령 행 이 라 고 부 르 지 않 기 때 문 입 니 다.AI 라 고 부 릅 니 다.
비록 고 지능 ai 를 개발 할 수 는 없 지만 명령 행 으로 완성 할 수 있 는 임무 가 많 습 니 다.여기 제 생각 을 적어 서 참고 하 시기 바 랍 니 다.
api 명령 행
대형 사이트 에 서 는 api 인터페이스 에 oauth 2.0 인증 을 제공 합 니 다.명령 행 을 사용 하여 api 인 터 페 이 스 를 호출 하려 면 충분히 할 수 있 습 니 다.
aws,google cloud,aliyun 같은 클 라 우 드 호스트 는 명령 행 을 사용 하면 많은 운영 시간 을 절약 할 수 있 습 니 다.
또한 위 에 pit.js 가 쓴 douban.js 를 참고 하여 두 판 의 데 이 터 를 캡 처 할 수 있 습 니 다.두 판 의 공공 api 는 인증 없 이 방문 할 수 있 습 니 다.테스트 를 하 는 것 이 매우 편리 합 니 다.
명령 행 파충류
node.js 를 사용 하여 파충 류 를 개발 하 는 것 은 python 을 사용 하 는 것 처럼 간단 하지만 기능 이 완 비 된 파충 류 는 명령 행 인터페이스 가 없어 서 는 안 됩 니 다.새로운 수요 가 있 을 때마다 코드 를 수정 할 수 는 없습니다.다음 에 제 가 쓴 간단 한 node.js 기반 파충류 프로젝트 를 공유 하 겠 습 니 다.
양식 제출
api 인 터 페 이 스 를 제공 하지 않 지만 명령 을 사용 하여 상호작용 을 하고 싶 은 사이트 에 대해 서 는 폼 제출 을 통 해 로그 인 을 한 다음 에 로그 인 을 한 후에 할 수 있 는 일 을 할 수 있 습 니 다.예 를 들 어 글 을 발표 하 는 것 입 니 다.
현재 많은 사이트 에서 markdown 을 사용 하여 글 을 편집 하고 발표 하 는 것 을 지원 합 니 다.이런 사이트 에 대해 서 는 자신의 명령 행 을 개발 하여 통일 적 으로 관리 할 수 있 습 니 다.글 을 다 쓴 후에 간단 한 명령 만 있 으 면 글 을 동시에 각 사이트 로 보 낼 수 있 습 니 다.
여러분 의 생각 을 교류 하 는 것 을 환영 합 니 다!
개인 블 로그 주소:자유 전단
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
getopt () 함수 소개extern char *optarg; //옵션 뒤에 매개 변수 값 이 연결 되 어 있 으 면 optarg 는 이 매개 변수 값 을 가리 키 고 있 습 니 다. 즉, 명령 행 매개 변수 중의 옵션 을 분석 하 는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.