私のSSGのリファクタリング
4544 ワード
1 . Lab 5要件
my-ssgは、過去数週間に多くの新機能で更新され、これらの機能は別の貢献者によって書かれた、私のSSGのソースコードは避けられないほどのロジック、矛盾する命名規則などが含まれます.
この研究室では、既存のコードをリファクタにし、構造と保守性を向上させる必要があります.また、これは我々が今週学んだ
git rebase
を使用するための良い練習です.私が私のSSGに適用した若干の修正は、ここにあります:
リファクタリング処理
まず最初に、私はオプション宣言と入力パス合法化が置かれる
index.js
ファイルを見始めました.このファイルは少し遅れていたので、checkInput()
とtrackDistFolder()
を新たにモジュール化することにしました.第二に、私はグローバル変数を使用する必要はありませんし、いくつかの変数名とファイル名は本当に良いことではないことに気づいた.結果として、私はグローバル変数をスコープ変数に変更し、より意味のある名前を得るためにいくつかの変数/ファイル名に名前を変更しました.
リファクタリングの過程でエラーが発生しました.したがって、エラーがあるときはいつでも、ログメッセージを表示し、この状況を解決するために、非ゼロ終了コードで
return
ステートメントを使用します. try {
await fsPromise.mkdir("./dist");
console.log(chalk.bold.green("--- dist folder is created successfully! ---"));
} catch (err) {
console.log(chalk.bold.red("***Cannot create dist folder!***"));
return process.exit(-1);
}
次に、前述のように、ソースコードには論理反復を含まないことは避けられない.驚いたことに、私はここでいくつかを見つけることができましたconst sortedFile = files.filter((file) => path.extname(`${inputPath}/${file}`) === ".txt");
sortedFile.forEach((file) => {
const fileName = fileModule.readFile(`${inputPath}/${file}`, cssLink, language, outputContainer);
const url = `./${encodeURI(fileName)}.html`;
body += `<a href=\"${url}\">${fileName}</a>\n`;
});
const sortedMDFile = files.filter((file) => path.extname(`${inputPath}/${file}`) === ".md");
sortedMDFile.forEach((file) => {
const fileName = fileModule.readFile(`${inputPath}/${file}`, cssLink, language, outputContainer);
const url = `./${encodeURI(fileName)}.html`;
body += `<a href=\"${url}\">${fileName}</a>\n`;
});
---解決方法:()-- getbodyhtml ()を作成する
function getBodyHTML(path, stylesheet, language, outputContainer, fileExtension){
let fileName = fileExtension == ".txt"
? readFile(path, stylesheet, language, outputContainer)
: readMDFile(path, stylesheet, language, outputContainer) ;
let url = `./${encodeURI(fileName)}.html`;
return `<a href=\"${url}\">${fileName}</a><br>\n`;
}
----変数名の変更const textFile = files.filter((file) => path.extname(`${pathToFile}/${file}`) === ".txt");
textFile.forEach((file) => {
body += getBodyHTML(`${pathToFile}/${file}`, stylesheet, language, outputContainer, ".txt");
});
const mdFile = files.filter((file) => path.extname(`${pathToFile}/${file}`) === ".md");
mdFile.forEach((file) => {
body += getBodyHTML(`${pathToFile}/${file}`, stylesheet, language, outputContainer, ".md");
});
.json
で同じチェックロジックをコピーする代わりにindex.js
ファイルを読み終えた後にそれを使用することができますconst fs = require("fs");
const check = require("./checkInput");
module.exports.readJson = (pathToFile) => {
fs.readFile(pathToFile, "utf8", (err, json) => {
if (err) {
console.log(chalk.bold.red("***Cannot read the file!***"));
return process.exit(-1);
}
const data = JSON.parse(json);
const stylesheet = data.stylesheet || "https://cdn.jsdelivr.net/npm/water.css@2/out/water.css";
const language = data.lang || "en-CA";
check.checkInput(data.input, stylesheet, language, true);
});
};
結局、私の最終的なコミットは92e007です再利用
全体的に、
git rebase -i
は非常に役立つコマンドです.それは私が単一の1つに複数のコミットをスカッシュするのに役立った.一方、git commit --amend
は私がコミットメッセージを加えるか、修正するのを許しました.Reference
この問題について(私のSSGのリファクタリング), 我々は、より多くの情報をここで見つけました https://dev.to/vivianvu/osd600-refactoring-my-ssg-5d7lテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol