あなたを迅速に稼働させるための整理された110のボイラープレート。型タイプスクリプト、プアクトを介したネイティブJSXサポート、SASSを備えたCSSモジュール、優れたDXの適切に定義されたWebpack構成、およびすべてパフォーマンスのために事前に最適化されています。
デモ:https://11tyby.netlify.app/
TypeScript、JSX、動的輸入、SASSなどを処理するために必要なツールでセットアップを取得するのに時間がかかります。このプロジェクトには、ユーザーに出荷されるコードの量を減らすための部分的な水分補給もあります。
このプロジェクトはモジュールパターンを介して構造化され、ファイルは機能、例えば./src/modules/home
を介してグループ化されます。これにより、アプリケーションが成長したときに将来の証明を改善し、必要な場所でコードをローカライズすることができます。ページ*.11ty.tsx
ファイルは関連する機能フォルダー内にあり、 permalink
プロパティをエクスポートして、URL構造を定義するために:
module . exports = {
render : Page ,
data : ( ) => ( {
permalink : '/my-feature/index.html' ,
} ) ,
} ;
11tybyは、CSSモジュールとSASSのサポートを受けて事前に設定されています。グローバルまたはローカライズされたスタイルをインポートする2つのオプションがあります。 SASSまたはCSSファイルをCSSモジュールに変換するには、ファイル( login.module.css
に.module
サフィックスを適用する必要があります。その後、これをコンポーネントに直接インポートできます。
import style from './login.module.scss' ;
/*[...]*/
function Login ( ) {
return < form class = { style . form } > /*[...]*/ </ form > ;
}
グローバルにスタイルをインポートするには、希望するファイルにノンリターンインポートステートメントを追加するだけです。
import './global.css' ;
/*[...]*/
生成されたスタイルシートをページに適用するには、 *.11ty.tsx
ファイルからエクスポートされるデータオブジェクト内にcssPath
プロパティを追加する必要があります。
function Page ( ) {
return < main class = { style . wrapper } > { /*[...]*/ } </ main > ;
}
/*[...]*/
module . exports = {
render : Page ,
data : ( ) => ( {
permalink : 'index.html' ,
cssPath : 'login/login.11ty.css' , // <----
} ) ,
} ;
パスはそれぞれのモジュールフォルダーと一致し、名前は*.11ty.tsx
ファイル名の名前を反映しますが、CSS拡張子を使用します。
11tybyには、部分的な水分補給の適用に特化したパッケージが含まれています。これはHOCとして機能し、クライアントに水分補給したいコンポーネントをラップします。これを次のように適用できます。
import { define } from 'preactement' ;
/*[...]*/
function MainForm ( ) {
return < form > /*[...]*/ </ form > ;
}
/*[...]*/
const Form = define ( 'main-form' , ( ) => MainForm ) ;
/*[...]*/
export { Form } ;
独自のフォルダー内にコンポーネントを作成し、この関数をindex.ts
ファイル内に適用することをお勧めします。そうすれば、コンポーネント自体を使用して、実行時に必要なコンポーネントが必要とする「変換」を分類できます。ここで例を見ることができます。
水分補給コンポーネントを取得したら、「エントリ」ファイルにインポートする必要があります。これらには.entry
が接尾辞が付いており、それぞれのモジュールフォルダー、例えば./src/home/home.entry.ts
に配置する必要があります。
エントリファイルは、水分補給コンポーネントをインポートする必要があります。
import '@/modules/home/components/form' ;
このファイルは、コンポーネントからエクスポートされたdata
オブジェクトに渡すことにより、 *.11ty.tsx
ファイル内で参照されます。
/*[...]*/
function Page ( ) {
return < main > { /*[...]*/ } </ main > ;
}
/*[...]*/
module . exports = {
render : Page ,
data : ( ) => ( {
permalink : 'index.html' ,
jsPath : 'home/home.entry.js' , // <----
} ) ,
} ;
作業例については、こちらのhome
モジュールをご覧ください。
APIなどからデータを収集するためのすべての公式の110の方法は、ここで機能します。 GraphQLの使用を含む、公式の11tyドキュメントでこれを行う方法の多くの素晴らしい例があります:https://www.11ty.dev/docs/data-js/。
グローバルデータを定義するには、JSON、JSまたはTypeScriptファイルのいずれかを./src/data
フォルダーに追加します。これらは110で解析され、データカスケードを介して追加されます。これらは、 .11ty.ts*
ファイルで直接アクセスできます。
たとえば、 global.ts
ファイルを./src/data
に追加する場合、ページのglobal
プロパティを介してこれにアクセスします。
interface IProps {
global : {
title : string ;
} ;
}
/*[...]*/
function Page ( { global } : IProps ) {
return (
< main >
< h1 > { global . title } </ h1 >
</ main >
) ;
}
モジュールに固有のデータ(例:関連するモジュールフォルダー内に.data
が付いたファイルを追加する)を追加するには、ローカルデータを追加します。これは、上記とまったく同じ方法でアクセスできますが、そのページでのみ。たとえば、 home.data.ts
を./src/modules/home
に追加した場合、ホームページ11ty.tsx
ファイルはそのデータファイル内に保持されている値にアクセスできます。
git clone [email protected]:jahilldev/11tyby.git
yarn
yarn start
yarn build