Рубрики
Без рубрики

Построение git с помощью node.js и typescript – часть 0

Серия сообщений после моего процесса создания GIT с помощью TypeScript, основанного на Book Building Git Джеймса Коглана. Tagged с помощью TypeScript, Git, Node, JavaScript.

Вступление

Недавно я нашел эту удивительную электронную книгу, Здание git Джеймс Коглан.

Строительство GIT – это глубокое погружение в внутренние силы системы управления версиями GIT. Перестроив его на языке программирования высокого уровня, мы исследуем информатику, стоящую за этим широко используемым инструментом. При этом мы получаем более глубокое понимание самого GIT, а также охватываем широкий спектр широко применимых тем программных тем.

Я не разработчик Ruby, поэтому я буду реализовать клон GIT, Jit , используя node.js и typescript. Эта серия блога будет отслеживать этот процесс, и я сделаю все возможное, чтобы не испортить книгу. Он полон некоторых Невероятный Подробнее не только о GIT, но и о файловых системах, операционных системах и многом другом!

В этом первом посте я собираюсь поделиться своей местной средой разработки и кодом из главы 3 Раздела 1. Сначала не будет удаленного репозитория для моей реализации, но позже я обязательно загрузим и поделюсь этим.

Кроме того, ни одна из этих серий не спонсируется, и ссылки, которые я предоставляю в книге, не являются рефералами. Я пишу эту серию, потому что мне нравится учиться на публике и делиться ссылками на книгу, потому что я хочу поддержать автора.

Среда разработки

Для моей местной среды я использую редактор кодов Visual Studio на MacOS Catalina. Я буду использовать последние версии Node.js и TypeScript. На момент написания этого поста я использую Node.js v14.2 и TypeScript v3.8; Я также буду держать это в курсе в будущем.

Я начал свой проект с:

mkdir jit-ts
cd jit-ts
npm init -y
npm i -D typescript @types/node

А затем добавил следующие разделы в мой package.json

{
    "main": "./lib/jit.js",
    "types": "./lib/jit.d.ts",
    "bin": {
        "jit": "./lib/jit.js"
    },
    "scripts": {
        "build": "tsc -w -p ."
    }
}

Кроме того, я предпочитаю использовать встроенный отладчик VSCODE, чтобы пройти и проверить мой код Итак, у меня есть эти два файла отладки в .VSCODE каталог:

запуск.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "jit-ts init",
            "program": "${workspaceFolder}/src/jit.ts",
            "preLaunchTask": "tsc: build - jit-ts/tsconfig.json",
            "postDebugTask": "jit cleanup",
            "outFiles": ["${workspaceFolder}/lib/**/*.js"],
            "args": ["init"]
        }
    ]
}

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "typescript",
            "tsconfig": "tsconfig.json",
            "problemMatcher": [
                "$tsc"
            ],
            "group": "build",
            "label": "tsc: build - jit-ts/tsconfig.json"
        },
        {
            "label": "jit cleanup",
            "type": "shell",
            "command": "rm -rf ${workspaceFolder}/.git"
        }
    ]
}

Эти файлы отладки будут расширяться и изменяться по мере роста реализации, но они работают достаточно хорошим для первого раздела.

Наконец, я создал конфигурацию TypeScript и исходный файл:

mkdir src
touch src/jit.ts
npx typescript --init

tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "declaration": true,
        "sourceMap": true,
        "outDir": "lib",
        "rootDir": "src",
        "strict": true,
        "moduleResolution": "node",
        "esModuleInterop": true,
        "forceConsistentCasingInFileNames": true
    }
}

Командование инициации

#!/usr/bin/env node

import fs from 'fs'
import { resolve, join } from 'path'

function jit() {
    const command = process.argv[2]

    switch (command) {
        case 'init': {
            const path = process.argv[3] || process.cwd()
            const rootPath = resolve(path)
            const gitPath = join(rootPath, ".git")

            ;["objects", "refs"].forEach(dir => {
                fs.mkdirSync(
                    join(gitPath, dir),
                    { "recursive": true }
                )
            })

            console.log(`initialized empty jit repo in ${gitPath}`)
            break
        }
        default: {
            console.log(`jit: '${command}' is not a jit command`)
        }
    }
}

jit()

Глава 3 Раздел 1 – все о init командование Код прост в запуске и не имеет введения входной проверки. Использование Process.argv Чтобы получить доступ к аргументам командной строки, функция начинается с установки команды. Внутри 'init' Блок, код получает путь ввода из аргументов командной строки; Это значение также по умолчанию в текущем рабочем каталоге пользователя. Далее он разрешает входной путь от относительного пути к абсолютному пути и готовит .git Чтобы создать путь для каталога git root.

Хотите знать, в чем разница между относительным и абсолютным путем? Книга делает фантастическую работу, объясняющую разницу и почему необходимо использовать абсолютный путь, поэтому я призываю вас приобрести копию Здание git Для себя и прочитайте объяснение на странице 28 😉.

После разрешения пути функция итерация перевозит шорт -лист строк и генерирует каталоги, используя fs.mkdirsync командование Он использует рекурсивный свойство, которое было введено в node.js v10.

Это все функции, и, таким образом, завершая первый бит реализации git с использованием node.js и typescript.

Вывод

Я очень взволнован этой серией. Изучение тонкостей GIT и создание клона на моем любимом языке будет отличным опытом обучения. Если вам понравился этот первый пост и вы заинтересованы в том, чтобы присоединиться ко мне в этом учебном путешествии, обязательно следуйте за мной в Твиттере ( @arrowoodtech ) и здесь, на разработке. И не забудьте проверить книгу, Здание git Анкет

До следующего раза, счастливого кодирования!

Оригинал: “https://dev.to/ethanarrowood/building-git-with-node-js-and-typescript-part-0-31mk”