머리말 명령 행 프로그램 을 사용 하 는 것 은 프로그래머 에 게 흔 하 다.전단 엔지니어 나 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 와 유사 한 오픈 소스 프로젝트 가 많이 존재 합 니 다.여기 서 간단하게 열거 하고 관심 있 는 것 은 스스로 알 아 보고 자신 이 좋아 하 는 항목 을 선택 하여 사용 할 수 있 습 니 다.
minimist 원천
optimist python 의 optimist 프로젝트 모방
commander.js tj 는 node.js 대신,co 의 저자,commander.js 는 ruby 의 commander 프로젝트 에서 유래 했 고 작가 도 tj
nopt npm 프로젝트 에서 사용
nomnomnom 는 더 이상 유지 하지 않 고 사용 을 권장 하지 않 습 니 다
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')
.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방법 은 세 개의 인터페이스 가 있다.
사실 이들 의 용법 은 차이 가 많 지 않 습 니 다.이 모듈 은 모두 하나의 모듈 을 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 를 참고 하 겠 습 니 다. 다음은 이 항목 의 디 렉 터 리 구조 입 니 다.
#!/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
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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: