Rumah >hujung hadapan web >tutorial js >Cara Membuat Tapak Statik dengan MetalSmith
Laman web statik mungkin sesuai untuk pelbagai projek, termasuk:
mata utama
saya memilih MetalSmith untuk tutorial ini kerana ia:
Saya telah menggunakan MetalSmith beberapa kali-sila fikir ini adalah cara utama untuk membina setiap laman web statik!
Pastikan anda mempunyai Node.js yang dipasang (contohnya menggunakan NVM), kemudian buat direktori projek baru, seperti projek dan memulakan fail pakej.json anda:
<code>cd project && cd project npm init -y </code>
Pasang Metalsmith Now dan pelbagai plugin yang akan kami gunakan untuk membina laman web ini. Ini adalah:
<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>
Kami akan menggunakan struktur berikut sebagai direktori sumber (SRC) dan membina (membina) dalam projek kami.
anda boleh membuat fail sampel seperti berikut, atau menyalinnya terus dari direktori demo SRC.
fail markdown halaman dimasukkan ke dalam SRC/HTML. Ini boleh mengandungi subdirektori peringkat pertama untuk setiap bahagian laman web, iaitu
src/html/start/index.md menjadi /start/index.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>Keutamaan: Nombor antara 0 (rendah) dan 1 (tinggi), yang akan kami gunakan untuk menyusun menu dan menentukan sitemap XML.
Terbitkan: Boleh ditetapkan sebagai draf, swasta, atau tarikh masa depan untuk memastikan ia tidak diterbitkan sebelum diperlukan.
Walaupun pilihan lain disokong, sistem templat hendal digunakan. Templat biasa memerlukan tag {{{{{}}} untuk mengandungi kandungan halaman dan sebarang nilai preface, seperti {{title}}:
<code>cd project && cd project npm init -y </code>
Rujukan kepada {{& gt;
bahagian
<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>di mana partialname adalah nama fail dalam direktori Src/Partials.
Aset statik
Plugin Custom
Bina direktori
<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>Jalankannya dengan nod ./build.js dan laman web statik akan dibuat dalam direktori Build. Markdown akan dihuraikan sebagai HTML, tetapi ia tidak tersedia kerana kami tidak memasukkan templat semasa proses membina.
Plugin Metalsmith
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>kod binaan logam boleh dikemas kini untuk menggunakan plugin ini:
<code>{{> partialname }}</code>Fungsi debugging ini dapat membantu anda membuat plugin tersuai anda sendiri, tetapi kebanyakan ciri yang anda perlukan sudah ditulis - terdapat senarai panjang plugin di laman web Metalsmith.
Buat binaan yang lebih baik
Jika pembolehubah persekitaran NODE_ENV ditetapkan kepada pengeluaran (eksport node_env = pengeluaran pada mac/linux atau node_env = pengeluaran pada tingkap), pembolehubah pembolehubah akan ditetapkan kepada benar:
<code>cd project && cd project npm init -y </code>
direktori rumah ditakrifkan dalam objek Dir supaya kita dapat menggunakannya semula:
<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>
Load Metalsmith dan Modul Plug-in. NOTA:
<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>
Objek SiteMeta ditakrifkan menggunakan maklumat yang digunakan untuk setiap halaman. Nilai penting adalah domain dan rootpath, yang ditetapkan berdasarkan pembangunan atau pengeluaran binaan:
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>
juga mentakrifkan objek TemplateConfig untuk menetapkan nilai lalai templat. Ini akan digunakan oleh plugin Metalsmith-in-Place dan Metalsmith-Layouts, yang membolehkan dalam halaman dan template rendering menggunakan hendal:
<code>{{> partialname }}</code>Objek
Metalsmith kini dimulakan seperti dahulu, tetapi kami juga lulus objek SiteMeta ke kaedah metadata untuk memastikan maklumat ini tersedia untuk setiap halaman. Jadi kita boleh merujuk kepada item seperti {{name}} dalam mana -mana halaman untuk mendapatkan nama tapak.
<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>
Panggilan plugin pertama kami MetalSmith-Publish, yang menghilangkan sebarang fail yang Nilai Penerbitan Preface ditetapkan untuk Draf, Swasta, atau Tarikh Masa Depan:
<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>
setDate adalah plugin tersuai yang termasuk dalam lib/metalsmith-setdate.js. Ia memastikan bahawa setiap fail mempunyai set nilai "tarikh", dan walaupun tiada nilai ditakrifkan dalam soalan sebelumnya, ia dapat dicapai dengan jatuh ke tarikh pelepasan atau masa penciptaan fail sebanyak mungkin:
<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>
Metalsmith-collections adalah salah satu plugin yang paling penting kerana ia memberikan setiap halaman ke kategori atau taksonomi berdasarkan lokasi atau faktor lain dalam direktori sumber. Ia boleh menyusun semula fail menggunakan prefaces seperti tarikh atau keutamaan dan membolehkan anda menetapkan metadata tersuai untuk koleksi. Definisi kod:
<code>devBuild = ((process.env.NODE_ENV || '').trim().toLowerCase() !== 'production') </code>seterusnya ialah penukaran HTML, diikuti oleh plugin MetalSmith-Permalinks, yang mentakrifkan struktur direktori untuk membina. Sila ambil perhatian bahawa Moremeta Sets: MainCollection untuk setiap fail di bawah:
<code>dir = { base: __dirname + '/', lib: __dirname + '/lib/', source: './src/', dest: './build/' } </code>Metalsmith-Word-Count mengira bilangan perkataan dalam artikel dan mengira berapa lama masa yang diperlukan untuk membacanya. Parameter {raw: true} Output Only Numbers:
<code>metalsmith = require('metalsmith'), markdown = require('metalsmith-markdown'), publish = require('metalsmith-publish'), wordcount = require("metalsmith-word-count"), collections = require('metalsmith-collections'), permalinks = require('metalsmith-permalinks'), inplace = require('metalsmith-in-place'), layouts = require('metalsmith-layouts'), sitemap = require('metalsmith-mapsite'), rssfeed = require('metalsmith-feed'), assets = require('metalsmith-assets'), htmlmin = devBuild ? null : require('metalsmith-html-minifier'), browsersync = devBuild ? require('metalsmith-browser-sync') : null, // custom plugins setdate = require(dir.lib + 'metalsmith-setdate'), moremeta = require(dir.lib + 'metalsmith-moremeta'), debug = consoleLog ? require(dir.lib + 'metalsmith-debug') : null, </code>Moremeta adalah satu lagi plugin tersuai yang termasuk dalam lib/metalsmith-moremeta.js. Ia melekatkan metadata lain ke setiap fail:
<code>cd project && cd project npm init -y </code>Plugin Metalsmith-in-Place dan Metalsmith-Layouts mengawal susun atur halaman dan templat masing-masing. Lulus objek TemplateConfig yang sama seperti yang ditakrifkan di atas:
<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>Jika htmlmin ditetapkan (dalam binaan pengeluaran), kita boleh memampatkan 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>Debug adalah plugin tersuai terakhir yang termasuk dalam lib/metalsmith-debug.js. Ia serupa dengan fungsi debug yang diterangkan di atas:
<code> lang="en"> > {{> meta }} > > {{> header }} <main>></main> > {{#if title}} <h1>></h1>{{ title }}> {{/if}} {{{ contents }}} > > {{> footer }} > > </code>Mulakan pelayan ujian BrowserSync supaya kami dapat menguji pembangunan pembangunan. Sekiranya anda tidak menggunakannya sebelum ini, ia kelihatan seperti sihir: Setiap kali anda membuat perubahan, laman web anda akan menyegarkan semula secara ajaib, dan apabila anda menatal atau melayari laman web, pandangan dalam dua atau lebih pelayar akan menyegerakkan:
<code>{{> partialname }}</code>Akhirnya, kita boleh menggunakan:
<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>selebihnya adalah langkah terakhir .build () untuk membuat laman web:
<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>Apabila anda selesai, anda boleh menjalankan nod ./build.js sekali lagi untuk membina laman web statik anda.
apa yang perlu diberi perhatian kepada
Plug-ins tidak serasi
pesanan plugin sangat penting
BrowserSync membina semula isu
Orang yang menggunakan pengurus tugas seperti Gulp akan melihat bahawa Metalsmith menyediakan proses membina yang biasa. Terdapat pemalam untuk preprocessing CSS, pemampatan imej, sambungan fail, pencerobohan dan banyak lagi dengan SASS. Untuk proses yang lebih mudah, ia mungkin cukup.
Proses ini menghalang penyebaran BrowserSync yang disebutkan di atas. Ingatlah untuk menggunakan .clean (palsu) untuk memastikan bahawa Metalsmith tidak pernah membersihkan folder binaan apabila tugas lain aktif.
<code>cd project && cd project npm init -y </code>
Adakah Metalsmith sesuai untuk anda?
Membuat sistem membina Metalsmith memerlukan masa, dan kami tidak menganggap jumlah kerja yang terlibat dalam templat dan penempatan HTML. Walau bagaimanapun, sebaik sahaja anda mempunyai proses yang tersedia, menambah, mengedit, dan memadam fail markdown menjadi sangat mudah. Ia mungkin lebih mudah daripada menggunakan CMS, dan anda mempunyai semua manfaat laman web statik.
Soalan Lazim Mengenai Mewujudkan Laman Web Statik dengan Metalsmith
bagaimana memasang metalsmith?
Bagaimana untuk membuat projek Metalsmith baru?
Untuk menambah plugin ke projek Metalsmith anda, anda perlu memasangnya melalui npm dan kemudian merujuknya dalam fail konfigurasi MetalSmith anda. Sebagai contoh, untuk menambah plugin markdown, anda perlu menjalankan NPM memasang metalsmith-markdown, dan kemudian dalam fail konfigurasi anda, anda perlu menambah var markdown = memerlukan ('metalsmith-markdown'); )) Pergi ke rantaian membina Metalsmith anda.
Untuk membina laman web MetalSmith anda, anda perlu menjalankan pembinaan Metalsmith di terminal. Ini menyusun semua fail dan mengeluarkannya ke direktori Build, yang kemudiannya boleh digunakan ke pelayan anda.
Untuk menyesuaikan susun atur laman web Metalsmith anda, anda boleh menggunakan enjin templat seperti hendal atau jed. Ini membolehkan anda membuat templat yang boleh diguna semula untuk bahagian -bahagian laman web anda yang berlainan, seperti tajuk, kaki, dan halaman individu.
Untuk menambah kandungan ke laman web Metalsmith anda, anda boleh membuat fail markdown dalam direktori sumber. Apabila membina laman web, fail -fail ini ditukar kepada HTML. Anda juga boleh menggunakan CMS seperti Netlify CMS untuk menguruskan kandungan anda.
Untuk menggunakan laman web Metalsmith anda, anda boleh menggunakan perkhidmatan seperti Netlify atau GitHub Pages. Perkhidmatan ini akan menjadi tuan rumah laman web statik anda dan menggunakan perubahan secara automatik apabila anda menolak ke repositori.
Untuk mengemas kini laman web Metalsmith anda, anda hanya menukar fail sumber dan membina semula laman web anda. Perubahan akan ditunjukkan dalam direktori Build, yang kemudiannya boleh digunakan ke pelayan anda.
Ya, Metalsmith sangat berskala dan boleh digunakan untuk laman web yang besar dan kompleks. Struktur modularnya membolehkan anda menambah fungsi seperti yang diperlukan, dan penggunaan fail statik bermakna ia dapat mengendalikan banyak kandungan tanpa melambatkan.
Atas ialah kandungan terperinci Cara Membuat Tapak Statik dengan MetalSmith. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!