나만의 git 작성하기(typescript로) - 파트 1
The combination of core simplicity and powerful applications often makes thing[s] really hard to grasp, because of the mental jump required to derive the variety of applications from the essential simplicity of the fundamental abstraction (monads, anyone?)
Python에서 자신의 git을 작성하는 방법tutorial에서 가져온 것으로 TypeScript로 포팅하기로 결정했습니다.
이번 게시물과 다음 게시물에서는 튜토리얼을 살펴보고 8단계로 완료할 것입니다. 가능한 한 강력하게 입력된 코드를 찾을 수 있습니다here. 이 튜토리얼은 결과 앱을 "모든 기능을 갖춘 git 라이브러리 및 CLI로"업그레이드하는 작업을 독자에게 맡기므로 끝까지는 아니더라도 한 단계 더 나아가도록 노력할 것입니다.
우리는 댄스?
0 - 의도된 청중
NodeJS에 익숙하고 파일 시스템에 대한 기본적인 이해가 있는 중급 JS/TS 개발자. 언어를 배우는 TypeScript 애호가.
1 - 시작하기
아이디어는 wyag를 모방하는 TypeScript에서 Node.js 앱을 만드는 것입니다. 이를 위해서는 TypeScript에 CLI 인터페이스가 필요합니다.
Node로 CLI를 생성하는 방법this tutorial을 따랐으며 아래 프로세스를 요약합니다.
초기화
폴더에서
npm init
를 수행한 다음 package.json
에 다음 종속성을 추가합니다.clear - 화면 지우기,
figlet - Schwaaag용 ASCII 아트,
chalk - 터미널 스타일링
commander - 인수용
path - 파일 및 디렉토리 경로 작업용
및 다음 devDependencies:
@types/node - Node.js에 대한 유형 정의
nodemon - 이것이 무엇인지 모른다면 지금이 이 튜토리얼 읽기를 중단하고 다른 일을 할 때입니다
ts-node - 실행 환경 및 REPL(REPL을 Google에 검색해야 하는 경우 진지하게 다른 작업을 수행하십시오.)
typescript - ❤️
스크립트
package.json
의 스크립트 섹션은 다음과 같아야 합니다."scripts": {
"start": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts",
"create": "npm run build && npm run test",
"build": "tsc -p .",
"test": "sudo npm i -g && pizza",
"refresh": "rm -rf ./node_modules ./package-lock.json && npm install"
},
TSconfig
tsconfig.json
와 같은 폴더에 다음 내용이 포함된 package.json
파일도 필요합니다.{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["es6", "es2015", "dom"],
"declaration": true,
"outDir": "lib",
"rootDir": "src",
"strict": true,
"types": ["node"],
"esModuleInterop": true,
"resolveJsonModule": true
}
}
CLI 생성
디렉터리에
src
폴더를 만들고 그 안에 index.ts
라는 파일을 만듭니다. 그런 다음 편집을 시작합니다.우리는 정상적인 shebang으로 시작합니다.
#!/usr/bin/env node
화면 지우기:
clear()
종속성을 가져옵니다.
const chalk = require('chalk');
const clear = require('clear');
const figlet = require('figlet');
const path = require('path');
const program = require('commander');
배너 표시:
console.log(
chalk.green(
figlet.textSync('sustain', { font: 'slant', horizontalLayout: 'full' })
));
처리할 CLI 앱에 명령/인수를 추가합니다.
program
.version('0.0.1')
.description('A distributed version control system')
.option('-i, --init', 'Init a repo')
.option('-a, --add', 'Add file')
.option('-c, --cat', 'Cat file')
.option('-t, --checkout', 'Checkout')
.option('-m, -commit', 'Commit')
.option('-h, -hash', 'Hash Object')
.option('-l, -log', 'Log')
.option('-t, -ls-tree', 'Hash Object')
.option('-h, -hash', 'Hash Object')
.option('-g, -merge', 'Merge')
.option('-r, -rebase', 'Rebase')
.option('-v, -rev', 'Rev parse')
.option('-r, -rm', 'Remove')
.option('-s, -show', 'Show ref')
.option('-t, -tag', 'Tag')
.parse(process.argv);
다음으로 사용자가 보낸 인수에 대한 몇 가지 자리 표시자 작업을 원합니다. 여기로 돌아와 각 항목에 대한 함수를 작성합니다.
if (program.init) console.log(' - Initialize a repo');
if (program.add) console.log(' - Add file');
if (program.cat) console.log(' - Cat file');
if (program.checkout) console.log(' - Checkout');
if (program.commit) console.log(' - Commit');
if (program.hash) console.log(' - Hash object');
if (program.log) console.log(' - Log');
if (program.lstree) console.log(' - Show dir tree');
if (program.merge) console.log(' - Merge');
if (program.rebase) console.log(' - Rebase');
if (program.rparse) console.log(' - Rev parse');
if (program.rm) console.log(' - Remove');
if (program.show) console.log(' - Show ref');
if (program.tag) console.log(' - Tag');
마지막으로 다음을 추가하여 사용자에게 도움이 필요한 경우 필수
-h
및 --help
인수를 구현합니다.if (!process.argv.slice(2).length) {
program.outputHelp();
}
이제
npm run build
를 수행하고 프로그램을 호출하면 다음과 같은 내용이 표시됩니다.다음 부분에서는 기본 빌딩 블록인
SusRepository
클래스를 프로그램에 추가합니다. 또한 코드에 몇 가지 유틸리티 기능을 추가할 것입니다. 그런 다음 init
명령을 구현하고 RepoFind
기능에 대한 git 디렉토리를 재귀적으로 찾는 init
함수를 작성합니다.내 블로그용으로 작성된 원본 기사를 읽을 수 있습니다here .
Reference
이 문제에 관하여(나만의 git 작성하기(typescript로) - 파트 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/surajsharma/write-your-own-git-in-typescript-part-1-3g8m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)