前の記事では、静的なWebサイトジェネレーターを使用するかどうかの理由について説明しました。要するに、静的なWebサイトジェネレーターは、テンプレートと生データ(通常はMarkdownファイルに含まれる)からのHTMLのみを含むページファイルを構築します。ホスティング、パフォーマンス、セキュリティのオーバーヘッドなしで、いくつかのCMSの利点を提供します。
静的Webサイトは、次のようなさまざまなプロジェクトに適している場合があります。
特定の種類のプロジェクト(ブログなど)をターゲットにしていません
さまざまなテンプレートおよびデータ形式のオプションをサポートしています
軽量数回金属スミスを使用しました。これがすべての静的Webサイトを構築する究極の方法だとは思わないでください!
node.jsがインストールされていることを確認してください(たとえばNVMを使用して)、プロジェクトや初期化などの新しいプロジェクトディレクトリを作成します。
<code>cd project && cd project npm init -y </code>
Metalsmith-Assets - メタルスミスビルドに静的資産を含める
<code>npm install --save-dev metalsmith metalsmith-assets metalsmith-browser-sync metalsmith-collections metalsmith-feed metalsmith-html-minifier metalsmith-in-place metalsmith-layouts metalsmith-mapsite metalsmith-markdown metalsmith-permalinks metalsmith-publish metalsmith-word-count handlebars </code>
ページ
ページマークダウンファイルはSRC/HTMLに含まれています。これには、各Webサイトセクションの第1レベルのサブディレクトリ、つまり
src/html/start - 特定の順序でプロジェクトを説明するページ
などのディレクトリベースのパーマリンクに変換します
src/html/start/index.mdは/start/index.html
になります優先度:0(低)から1(高)の間の数字。これを使用してメニューを並べ替えてXMLサイトマップを定義します。
<code>--- title: My page title description: A description of this page. layout: page.html priority: 0.9 date: 2016-04-19 publish: draft --- This is a demonstration page. ## Example title Body text.</code>
パブリッシュ:必要になる前に公開されないことを確認するために、ドラフト、プライベート、または将来の日付として設定できます。
他のオプションはサポートされていますが、ハンドルバーテンプレートシステムが使用されます。典型的なテンプレートには、{{{contents}}}タグが必要です。ページコンテンツと{{title}}などの序文値を含む:
<code>cd project && cd project npm init -y </code>
{&gt; {&gt;
パートここで、partialNameはSRC/partialsディレクトリのファイルの名前です。
<code>npm install --save-dev metalsmith metalsmith-assets metalsmith-browser-sync metalsmith-collections metalsmith-feed metalsmith-html-minifier metalsmith-in-place metalsmith-layouts metalsmith-mapsite metalsmith-markdown metalsmith-permalinks metalsmith-publish metalsmith-word-count handlebars </code>
静的資産
カスタムプラグイン
build directory
開発モード:HTMLは圧縮されず、テストWebサーバーを起動します。
node ./build.jsで実行し、静的Webサイトがビルドディレクトリに作成されます。マークダウンはHTMLとして解析されますが、ビルドプロセス中にテンプレートを含めなかったため利用できません。
<code>--- title: My page title description: A description of this page. layout: page.html priority: 0.9 date: 2016-04-19 publish: draft --- This is a demonstration page. ## Example title Body text.</code>
表面上、金属製のビルドファイルは、Gulpで使用されているファイルと似ています(ただし、ストリームは使用しません)。適切な引数を使用して、プラグインをMetalsmith使用方法に渡して、プラグインを呼び出します。プラグイン自体は、3つのパラメーターを受け入れる別の関数を返す必要があります。
メタデータや
などのグローバル情報を含むメタルスミスオブジェクト プラグインがその作業を完了した後に呼び出さなければならない完了関数より良いビルドを作成します
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>
node_env環境変数が生産に設定されている場合(mac/linuxまたはnode_env = windowsでの生産)、変数devbuildはtrueに設定されます:
<code>{{> partialname }}</code>
<code>cd project && cd project npm init -y </code>
ホームディレクトリはdirオブジェクトで定義されているため、再利用できます。
<code>npm install --save-dev metalsmith metalsmith-assets metalsmith-browser-sync metalsmith-collections metalsmith-feed metalsmith-html-minifier metalsmith-in-place metalsmith-layouts metalsmith-mapsite metalsmith-markdown metalsmith-permalinks metalsmith-publish metalsmith-word-count handlebars </code>
<code>--- title: My page title description: A description of this page. layout: page.html priority: 0.9 date: 2016-04-19 publish: draft --- This is a demonstration page. ## Example title Body text.</code>
また、
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>
Metalsmithオブジェクトは以前と同じように初期化されますが、SiteMetaオブジェクトをメタデータメソッドに渡して、この情報が各ページで利用可能であることを確認します。したがって、サイト名を取得するには、任意のページの{{name}}のようなアイテムを参照できます。
<code>{{> partialname }}</code>
最初のプラグインコールMetalsmith-Publishを呼び出します。これは、序文の公開値がドラフト、プライベート、または将来に設定されているファイルを削除します:
<code>// basic build 'use strict'; var metalsmith = require('metalsmith'), markdown = require('metalsmith-markdown'), ms = metalsmith(__dirname) // the working directory .clean(true) // clean the build directory .source('src/html/') // the page source directory .destination('build/') // the destination directory .use(markdown()) // convert markdown to HTML .build(function(err) { // build the site if (err) throw err; // and throw errors }); </code>
setDateは、lib/metalsmith-setdate.jsに含まれるカスタムプラグインです。各ファイルには「日付」値が設定されていることが保証され、前の質問で値が定義されていなくても、リリース日またはファイルの作成時間にできるだけ戻ることで達成できます。
<code>function debug(logToConsole) { return function(files, metalsmith, done) { if (logToConsole) { console.log('\nMETADATA:'); console.log(metalsmith.metadata()); for (var f in files) { console.log('\nFILE:'); console.log(files[f]); } } done(); }; }; </code>
Metalsmith-Collectionsは、ソースディレクトリ内の場所またはその他の要因に基づいて各ページをカテゴリまたは分類に割り当てるため、最も重要なプラグインの1つです。日付や優先順位などの前メタルを使用してファイルを再注文し、コレクションにカスタムメタデータを設定できます。コード定義:
<code>ms = metalsmith(__dirname) // the working directory .clean(true) // clean the build directory .source('src/html/') // the page source directory .destination('build/') // the destination directory .use(markdown()) // convert Markdown to HTML .use(debug(true)) // *** NEW *** output debug information .build(function(err) { // build the site if (err) throw err; // and throw errors }); </code>
SRC/HTML/STARTディレクトリの各ファイルの開始コレクション。ファイルの前の質問で設定された優先度の値によってそれらを並べ替えます。
<code>devBuild = ((process.env.NODE_ENV || '').trim().toLowerCase() !== 'production') </code>
Metalsmith-Word-Countは、記事の単語の数を計算し、それを読むのにかかる時間を計算します。 parameter {raw:true}出力番号のみ:
<code>dir = { base: __dirname + '/', lib: __dirname + '/lib/', source: './src/', dest: './build/' } </code>
Moremetaは、lib/metalsmith-moremeta.jsに含まれるもう1つのカスタムプラグインです。各ファイルに他のメタデータを添付します:
Metalsmith-in-PlaceおよびMetalsmith-Layoutsプラグインは、それぞれインページとテンプレートのレイアウトを制御します。上記と同じTemplateConfigオブジェクトを渡します:
<code>cd project && cd project npm init -y </code>
htmlminが設定されている場合(生産ビルドで)、HTMLを圧縮できます:
<code>npm install --save-dev metalsmith metalsmith-assets metalsmith-browser-sync metalsmith-collections metalsmith-feed metalsmith-html-minifier metalsmith-in-place metalsmith-layouts metalsmith-mapsite metalsmith-markdown metalsmith-permalinks metalsmith-publish metalsmith-word-count handlebars </code>
debugは、lib/metalsmith-debug.jsに含まれる最終的なカスタムプラグインです。上記のデバッグ関数に似ています:
<code>--- title: My page title description: A description of this page. layout: page.html priority: 0.9 date: 2016-04-19 publish: draft --- This is a demonstration page. ## Example title Body text.</code>
開発ビルドをテストできるように、browsersyncテストサーバーを起動します。以前に使用したことがない場合は、魔法のように見えます。変更を加えるたびに、ウェブサイトが魔法のようにリフレッシュし、Webサイトをスクロールまたは閲覧すると、2つ以上のブラウザのビューが同期します。
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>
最後に、
を使用できます<code>{{> partialname }}</code>
Metalsmith-MapsiteはXML SiteMapを生成します
<code>// basic build 'use strict'; var metalsmith = require('metalsmith'), markdown = require('metalsmith-markdown'), ms = metalsmith(__dirname) // the working directory .clean(true) // clean the build directory .source('src/html/') // the page source directory .destination('build/') // the destination directory .use(markdown()) // convert markdown to HTML .build(function(err) { // build the site if (err) throw err; // and throw errors }); </code>
<code>function debug(logToConsole) { return function(files, metalsmith, done) { if (logToConsole) { console.log('\nMETADATA:'); console.log(metalsmith.metadata()); for (var f in files) { console.log('\nFILE:'); console.log(files[f]); } } done(); }; }; </code>
シンプルなメタルスミスのウェブサイトを構築するときに多くのことを学びましたが、次の問題に注意してください。
互換性のないプラグインプラグインの順序は重要です
BROWSERSYNC REBUILD ISSUE
ただし、Gulpにはより広い範囲のプラグインがあり、Lint、展開、Auto-Prefixerを使用したPostCSS処理などの複雑なビルドアクティビティを可能にします。いくつかのGulp/Metalsmith Integrationプラグインがありますが、いくつかの問題があり、Gulpタスクはメタルスミスを直接実行できるため、必要ではありません
このプロセスは、上記のBrowserSyncの再構築問題を防ぎます。 .clean(false)を使用して、他のタスクがアクティブなときにメタルスミスがビルドフォルダーをクリアしないようにすることを忘れないでください。
<code>cd project && cd project npm init -y </code>
メタルスミスは、シンプルまたは高度にカスタマイズされたWebサイトのニーズがある場合に理想的です。ドキュメントプロジェクトを使用して、一度に1つの機能を追加してみてください。メタルスミスはJekyllのような代替品ほど完全に機能していませんが、そのように設計されていません。独自のプラグインを作成する必要があるかもしれませんが、簡単に行うことはできます。これは、JavaScript開発者にとって大きな利点です。
金属スミスを使用して静的Webサイトを作成することに関するFAQ メタルスミスとは何ですか?なぜそれを使用して静的なWebサイトを作成する必要があるのですか?
Metalsmithをインストールするには、コンピューターにnode.jsとnpmをインストールする必要があります。これらをインストールした後、ターミナルにCommand NPMインストールMetalsmithを実行してMetalsmithをインストールできます。これにより、Metalsmithとそのすべての依存関係がインストールされます。
新しいMetalsmithプロジェクトを作成するには、最初に端末でプロジェクトを作成するディレクトリに移動します。次に、コマンドメタルスミスを実行して新しいプロジェクトを作成します。これにより、プロジェクトの名前を含む新しいディレクトリが作成され、このディレクトリ内で静的Webサイトの基本構造が作成されます。
メタルスミスプロジェクトにプラグインを追加するには、NPM経由でそれらをインストールしてから、メタルスミス構成ファイルに参照する必要があります。たとえば、Markdownプラグインを追加するには、最初にNPMのインストールMetalsmith-Markdownを実行する必要があります。次に構成ファイルで、var Markdown = require( 'Metalsmith-Markdown')を追加する必要があります。 ))メタルスミスビルドチェーンに移動します。
Metalsmith Webサイトを構築するには、ターミナルでCommand Metalsmithビルドを実行する必要があります。これにより、すべてのファイルがコンパイルされ、それらをビルドディレクトリに出力し、サーバーに展開できます。
Metalsmith Webサイトのレイアウトをカスタマイズするには、ハンドルバーやJadeなどのテンプレートエンジンを使用できます。これらを使用すると、ヘッダー、フッター、個々のページなど、Webサイトのさまざまな部分に対して再利用可能なテンプレートを作成できます。
Metalsmith Webサイトにコンテンツを追加するには、ソースディレクトリにMarkdownファイルを作成できます。ウェブサイトを構築するとき、これらのファイルはHTMLに変換されます。 Netlify CMSなどのCMSを使用してコンテンツを管理することもできます。
Metalsmith Webサイトを展開するには、NetlifyページやGitHubページなどのサービスを使用できます。これらのサービスは、静的Webサイトをホストし、リポジトリにプッシュするときに変更を自動的に展開します。
Metalsmith Webサイトを更新するには、ソースファイルを変更してWebサイトを再構築するだけです。変更はビルドディレクトリに反映され、サーバーに展開できます。
はい、Metalsmithは非常にスケーラブルで、大規模で複雑なWebサイトに使用できます。そのモジュラー構造により、必要に応じて機能を追加できます。また、静的ファイルを使用すると、減速せずに多くのコンテンツを処理できます。
以上がメタルスミスを使用して静的サイトを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。