Simple blog made with 11ty (Eleventy) & bulma
Note
このプロジェクトはNuxt2から11ty(Eleventy)に移行されました。モダンな静的サイトジェネレーターを使用しています。
git clone https://github.com/oageo/nuxtblog-miller.git
cd nuxtblog-miller
pnpm install
pnpm generateNote: Windows環境で
pnpmコマンドが動作しない場合は、以下の代替コマンドを使用してください:npx @11ty/eleventy # ビルド npx @11ty/eleventy --serve # 開発サーバー
_site フォルダが生成されたことを確認
pnpm dev
# または
npx @11ty/eleventy --serveローカルサーバーが http://localhost:8080 で開始されます
このプロジェクトはNuxt2から11ty(Eleventy)に移行されています。既存のNuxt2プロジェクトから11ty版に移行する場合は以下の手順を実行してください。
既存のNuxt2関連の依存関係を削除し、11ty関連の依存関係に置き換えます:
# 古いNuxt2依存関係を削除
pnpm remove nuxt @nuxt/content @nuxtjs/axios @nuxtjs/pwa
# 11ty関連依存関係をインストール
pnpm add @11ty/eleventy bulma luxon markdown-it markdown-it-mathjax3 mathjax{
"scripts": {
"dev": "eleventy --serve",
"build": "eleventy",
"start": "eleventy --serve",
"generate": "eleventy",
"lint:js": "eslint --ext \".js,.njk\" --ignore-path .gitignore .",
"lint": "pnpm lint:js",
"lintfix": "pnpm lint:js --fix"
}
}# 移行前(Nuxt2)
layouts/ → src/_includes/
components/ → src/_includes/
pages/ → src/
content/articles/ → src/articles/
static/ → src/assets/
# 移行後(11ty)
src/_includes/ # レイアウトとコンポーネント
src/articles/ # マークダウン記事
src/assets/ # 静的ファイル
_site/ # ビルド出力(.gitignoreに追加)
-
レイアウトファイル:
layouts/default.vue→src/_includes/base.njk- Vue.js テンプレート記法からNunjucks記法に変換
-
コンポーネント:
components/*.vue→src/_includes/*.njkcomponents/milleryt.vue→src/assets/milleryt-component.js(WebComponent化)
-
ページファイル:
pages/*.vue→src/*.njk- Vue.js記法からNunjucks記法に変換
-
記事ファイル:
content/articles/*.md→src/articles/*.md- frontmatterは基本的にそのまま使用可能
git mvなどを活用することで、Gitログの肥大を軽減することが可能です。
Nuxt2の設定を11tyの設定に変換:
// .eleventy.js の作成
const { DateTime } = require("luxon");
const markdownIt = require("markdown-it");
const markdownItMathjax = require("markdown-it-mathjax3");
module.exports = function(eleventyConfig) {
// Markdown設定
const md = markdownIt({
html: true,
breaks: false,
linkify: true
});
md.use(markdownItMathjax, {});
eleventyConfig.setLibrary("md", md);
// 静的ファイルのコピー
eleventyConfig.addPassthroughCopy({"node_modules/bulma/css/bulma.min.css": "css/bulma.min.css"});
eleventyConfig.addPassthroughCopy({"node_modules/mathjax": "mathjax"});
eleventyConfig.addPassthroughCopy("src/assets");
// 日付フィルター
eleventyConfig.addFilter("readableDate", (dateObj) => {
return DateTime.fromJSDate(dateObj, {zone: 'utc'}).toFormat('yyyy年MM月dd日');
});
return {
dir: {
input: "src",
output: "_site"
}
};
};# 11ty build output
_sitemilleryt.vueをWebComponentに変換:
// src/assets/milleryt-component.js
class MillerYT extends HTMLElement {
connectedCallback() {
const ytvid = this.getAttribute('ytvid');
if (ytvid) {
this.render(ytvid);
}
}
render(ytvid) {
this.innerHTML = `
<div class="lazy block is-centered videoyt milleryt">
<iframe src="https://youtube.com/embed/${ytvid}" loading="lazy" title="YouTube video player">
<div class="milleryterror">
<p>milleryt.vue: something broken.</p>
</div>
</iframe>
</div>
`;
}
}
customElements.define('milleryt', MillerYT);移行完了後、以下のポイントを確認:
- ビルドが正常に実行される:
pnpm generate - デザインが維持されている:レイアウト、色、フォントが同じ
- 機能が正常動作する:
- 記事間ナビゲーション
- カテゴリ表示
- MathJax数式表示
- milleryt WebComponent
- ライセンス表示
- メタデータが正しく設定される:OGタグ、title、description
- 日付表示が正確:作成日と更新日が適切に表示
- Vue.jsの動的機能は使用できなくなります(静的サイト生成のため)
- Nuxt2のプラグインやモジュールは11ty用に再実装が必要
- ルーティングは11tyの規則に従います(ファイルベース)
- 開発サーバーのポートが変更されます(デフォルト8080)