言語ハブ- netlify X hashnode hackathonの提出
15005 ワード
The Language Hub is a central place for your language learning needs. Getting you to what you need quickly and easily
私はハッカーソンには一度も参加したことがない.私がそうしたくなかったので、私が彼らを見つけたとき、彼らの焦点はその時私のskillsetを越えたものにありました.
導入
いくつかの記事を読んでいたので、HashNodeが別のHackathonをホストしているのを見ました.私は要件を読み、唯一の主要なことはオープンソースです.
だから、私は心の近くに何かをしている-言語ハブの種類.言語参考書
訪問The Language Hub
見るthe code
考え
私は今、しばらくの間、言語を学び、教えてきました.私はしばしば私が理解したり説明しようとしている概念についての情報を見つけるために多くの時間がかかるシナリオに遭遇する-重要な部分.
生徒たちも私に何かを説明するよう頼んできた.正しい答えを与えるために、私はかなりの情報を検索しなければならない.
マイ・シンク
中央の場所-真実の源-それはあなたが知る必要がある言語の重要な部分を持っています.それはフランス語、スペイン語、ロシア語、北京語である.
迅速かつ容易に言語の重要な部分にあなたに場所.
Essentially, I would like to have a top bar where you choose your learning path. That would take you to the page of your chosen path.
That page will have a main content area and sidebar listing all the items related to it. Clicking an item in the sidebar would load that content in the main area.
これは大きな事業であり、世界中の人々からの生活のために参加する必要がある
ハウThe Language Hub 作品
サイトに到着すると、言語のボタンがあります.
カードを選択すると選択された言語の詳細ページにつながる.あなたが選択した言語について学ぶことができます
詳細ページは2つの主要なセクションに分けられます.
また、簡単に言語パスの切り替えのためのナビゲーションのドロップダウンです.
Thanks to Tailwind, the site is responsive
プロセス
ここではどのように私は生活にこのプロジェクトをもたらす
テックスタック
私は、TextWinCSSでスタイルを整えたNextJS、Markdownを選びました.
Next.js : すべてが静的に生成される場合、それは最高の作品
TailwindCSS : それは大騒ぎではないスタイリングの最も簡単な方法です
Markdown :それは簡単に書く形式であり、プルリクエストを処理するときにあまりにも多くのトラブルを与えません
next-mdx-remote : マークダウンファイルをレンダリングします.
Chakra Ui : 私は実際にダウンドロップと戦う時間を過ごすしたくなかったので、チャクラウイを追加しました
Netlify : アプリケーションを配備するには
計画
githubリポジトリ
私はgithubリポジトリを設定し、それがパブリックであることを確認しました.
サイトデザイン:
私はすべてのものがどのように見えるかを考えている.
ファイルとフォルダの構造
つ以上の言語を持ちたかったので、マークダウンファイルを自分のフォルダに分けなければならないでしょう
├── allLanguages
│ ├── languageOne
│ │ ├── file1.md
│ │ ├── file2.md
│ ├── languageTwo
│ │ ├── file!.md
貢献ガイド
貢献したい人のためのいくつかの簡単なガイドライン.
建物
私がやっていることの概要で、私は創造に移動します.
セットアッププロジェクト
私は新しいnextjsプロジェクトを解雇し、すぐにいくつかのものを得た.
jscofig.json
ファイル私が考え出さなければならなかったこと
ネストしたディレクトリからのファイルのレンダリング
最初の主なものは、ディレクトリ名とファイル名をスラッグとしてネストしたディレクトリに動的にファイルをレンダリングする方法です.
解決策
その中心に、言語ハブは、ソートのMarkdownブログです.しかし、各々の個々の言語フォルダの範囲内の各々のファイルのパスを得るために、異なる方法が必要であった.
Jon Peppnick この問題を解決するのに非常に役立ちました.
アクセスに加えて
learn
フォルダは、私はforEach
すべてのフォルダのループlearn
そして、それらのフォルダのあらゆるファイルのためのもう一つ.それから、私は拡張子なしでファイル名を抽出しました、そして、それらはスラグになりました.
それに加えて、私はまた、ファイルが完全なパスを形成するために置かれたフォルダ名を取った.
手順は以下の通りです.
export async function getStaticPaths() {
// get the directory for all language info
const learnDir = path.join("learn");
// read the learn directory
const languagePathsDirs = await fs.readdirSync(learnDir);
// create empty array where all the paths will be added to
const allPaths = [];
// run a loop to get each folder in the learn directory
languagePathsDirs.forEach((langPath) => {
const langPathDir = path.join(learnDir, langPath);
// read the folders
const files = fs.readdirSync(langPathDir);
// run another loop to get the files in each of
files.forEach((filename) => {
const path = {
params: {
// extract the langPath
langPath: langPath,
// extract the file name to be used as part of the slug
slug: filename.replace(".md", ""),
},
};
// push the path to the empty array
allPaths.push(path);
});
});
return {
// return the paths as params
paths: allPaths,
fallback: false,
};
}
When the above code worked, a lot of the heavy lifting had been dealt with
それから、それはちょうど現在過ぎていました
params
to getStaticProps
ページコンポーネントにサイドバーのLangPathからファイルのリストをレンダリングする
次に、私はサイドバーで与えられた言語のファイル名をどのようにレンダリングするかを理解しなければなりませんでした.本質的に、個々のフォルダにそれぞれのファイルの名前が必要で、それらはサイドバーメニューの項目になります.
解決策
これは物事が本当に面白いときです.私が到着した解決策は2つの部分にあった.
まず、言語パス(フォルダ)を文字列(ファイル)として持つファイルです.
それから、ルックアップ・ファイルはそれらのアレーを取って、どのパスにマッチするかに基づいてアレーを表示する.
言語メニューファイルは次のようになります.
検索ファイル:
それから、詳細ページのルックアップと呼ばれ、その結果をサイドバーコンポーネントに渡しました.
ドロップダウン
私の次のタスクは、現在利用可能なすべての言語のリストを持つナビゲーションバーのドロップダウンを持つことでした.
解決策
これは、タスクの簡単だった.これを達成するために、私はすべての言語が利用できるファイルと彼らの国旗を持っていました.私はそれらをマップし、チャクラのUIからメニューでそれらを表示します.
ここではsource code , 我々は、開いているいくつかの問題があります
スタイリングサイト
私はすべての作業を得たとき、私は結果に非常に満足していたので、私はサイトの外観に移動しました.
私はまた、訪問者に言語を要求するか、サイトに貢献するのを許容するカスタム404ページを確実にしました.
言語ハブの配備
それはNetlify Hackathonであるとして、要件の一つは、NetLifyで展開されるアプリケーションがあった.
Netlfy makes deploying your project a breeze. Either upload your static files or link a github repository
私はnetlifyアカウントにログインして
the-language-hub
Repo、そして、Netlifyが残りをするのを待ちました私はいくつかのエラーに遭遇しました.
エラー1 :
netlifyまたはeslintは、私が私の上に持っていたアポストロフィが好きでありませんでした
404.js
ページ.何が問題だったのかを把握するのに少し時間がかかった.私がしたとき、私は展開を試みました.次に、2番目のエラーが発生しました.
エラー2 :
配備されたサイトでは、展開ログに問題はありませんでした.しかし、あなたがページを訪問するとき、あなたはサーバーエラーを得ました.
何が悪いの?
私は次を使用している.JSはそんなに、私は追加するために使用されて
revalidate
私にgetStaticProps
. そのことは、それが唯一の作品ですfallback
あなたのgetStaticPaths
はfalse以外の値に設定されます.それは私がしたことです-サーバエラーに終わったfalseのフォールバックのために再検証を設定します
私はそれを修正し、アプリは私が意図したように働き始めた
今何をしていますか.
現在、私はより多くの言語データを加えています.
あなた自身の1つを追加したいですか?いくつかのアドバイスを提供したいですか?コメントまたは上で私を殴ってください
結果
すべてのすべてで、私は私が学び、達成できることに満足しています.
チェックアウトThe Language Hub
今日の終わりには、これはあなたのプロジェクトです.私はそれを考えたかもしれないが、私は心の中に他のみんなを持っていた.私は非常にフィードバックとあなたが持っている提案を大いに感謝します.
私はまた、そこにある言語の改善と別の言語の追加を支援したい人を探しています.
結論
私の最初のHackathon経験は面白かったです.私はアイデアを考えて、それに取り組んで、何か具体的なものにそれを実現する設定された時間枠を持っているスリルが大好きです.
私は、再びもう一つのHackathonに参加したいです.
読んでいただきありがとうございます、接続しましょう!
私のこの小さな隅を訪問していただきありがとうございます.つながりましょう.Polywork and
Reference
この問題について(言語ハブ- netlify X hashnode hackathonの提出), 我々は、より多くの情報をここで見つけました https://dev.to/psypher1/the-language-hub-netlify-x-hashnode-hackathon-submission-1k99テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol