ชุดเครื่องมือแบบแยกส่วนสำหรับการสร้างเว็บไซต์แบบคงที่
Stakit เป็นเฟรมเวิร์กที่ช่วยให้คุณสร้างไปป์ไลน์การสร้างที่มีประสิทธิภาพสำหรับเว็บไซต์แบบคงที่โดยไม่ทำให้เหนื่อย มันเรียบง่ายและเป็นโมดูล ใช้สตรีมและชุดเครื่องมือ Stakit มีปลั๊กอินและการแปลงมากมายที่คุณสามารถใช้ได้
Stakit ยังอยู่ในช่วงเริ่มต้นของการพัฒนา แต่คุณสามารถนำไปใช้เพื่อดูว่าคุณควรสนใจมันหรือไม่
ผู้ไม่เชื่อเรื่องพระเจ้ากรอบงาน : ทำงานร่วมกับกรอบงานใด ๆ ที่สามารถส่งออกสตริงได้
โมดูลาร์ : คุณไม่เคยมีสิ่งที่คุณไม่ต้องการ แต่คุณสามารถ npm install
API ขนาดเล็ก : มีเพียง 7 วิธีหลักเท่านั้น คุณต้องใช้เพียง 3 วิธีเท่านั้น
ไม่มีข้อจำกัด : คุณจะไม่ถูกจำกัดด้วยฟีเจอร์และเทมเพลตของโปรแกรมสร้างไซต์คงที่
รวดเร็ว หน่วยความจำมีประสิทธิภาพ : ใช้สตรีมอย่างหนัก
npm i stakit
var stakit = ต้องการ('stakit')var { เรนเดอร์, ไฮเดรต } = ต้องการ('stakit-choo')var app = ต้องการ('.')var kit = stakit()
.routes (ฟังก์ชัน (สถานะ) {return [ '/' ]
-
.render(เรนเดอร์(แอป))
.transform (ไฮเดรต) kit.output (stakit.writeFiles ('./public'))โดยทั่วไป คุณจะทำ 2 สิ่งเมื่อสร้างไซต์แบบคงที่:
เติม เนื้อหา บางส่วนให้กับ แอป ของคุณ
คัดลอก ไฟล์ แบบคงที่
มีเครื่องมือแบบโมดูลาร์ (และน่ารัก) มากมายสำหรับการรวม Javascript หรือการแปลง CSS Stakit เป็นสิ่งที่คล้ายกัน แต่สำหรับไซต์เต็ม และเน้นไปที่ไฟล์ HTML โดยเฉพาะ
คุณจะต้องจัดการชุดรวมแอปของคุณและรวมชุดรวมด้วยหากนั่นคือสิ่งที่คุณต้องการ ตามปรัชญาของ Choo มันมีขนาดเล็ก เข้าใจได้ และใช้งานง่าย ได้รับการออกแบบมาเพื่อทำงานกับ Choo เป็นหลัก แต่ควรทำงานร่วมกับเฟรมเวิร์ก isomorphic อื่นๆ ด้วย
Stakit ถูกเรียกโดยทางโปรแกรม ไม่ใช่จากบรรทัดคำสั่ง ดังนั้น คุณจะต้องมีไฟล์ Javascript (เช่น build.js ) ในตำแหน่งที่คุณต้องการ หลังจากนั้นคุณสามารถเริ่มต้น kit ด้วย stakit() จากนั้นโยงวิธีการสองสามวิธี
ต้องมีสองวิธีในไปป์ไลน์:
routes(fn)
render(fn)
วิธีการอื่นทั้งหมดเป็นทางเลือกและเรียกตามลำดับต่อไปนี้:
มิดเดิลแวร์ทั้งหมดที่ใช้โดย kit.use()
ฟังก์ชัน routesReducer ที่ใช้
สำหรับทุกเส้นทาง:
การเรียกเพียงครั้งเดียวไปยัง renderer ที่ใช้
transform สายทั้งหมด
สิ้นสุดไปป์ไลน์ด้วย kit.output()
ส่วนนี้จะแสดงเอกสารเกี่ยวกับวิธีการทำงานแต่ละฟังก์ชันใน Stakit มีวัตถุประสงค์เพื่อเป็นข้อมูลอ้างอิงทางเทคนิค
kit = stakit() เริ่มต้นอินสแตน kit ใหม่
kit.html(template, selector)ตั้งค่าเทมเพลต HTML เริ่มต้นและตัวเลือก
kit.use(fn(context)) พุชมิดเดิลแวร์ / ปลั๊กอินไปยังรายการมิดเดิลแวร์ ฟังก์ชันวัตถุประสงค์ทั่วไปจะทำงานก่อนการสร้างเส้นทาง คุณสามารถแก้ไขบริบทตามที่คุณต้องการ ตั้งแต่การเปลี่ยน state ไปจนถึงการติดตั้ง transform
kit.use (ฟังก์ชั่น (ctx) {
ctx._transforms.push(แปลง)})ดูมิดเดิลแวร์สำหรับข้อมูลเพิ่มเติม
kit.routes(routeReducer(state)) routeReducer เป็นฟังก์ชันที่ได้รับ context.state เป็นพารามิเตอร์และส่งกลับ Array ของสตริง/เส้นทาง นี่คือเส้นทางที่ Stakit จะเรียกใช้ render
kit.routes (ฟังก์ชัน (สถานะ) {
กลับ Object.keys (state.content)
// หรือแบบคงที่
กลับ [ '/', '/เกี่ยวกับ', '/บล็อก' ]})kit.render(renderer(route, state)) ตั้งค่าตัวเรนเดอร์ของบิลด์ นี่คือจุดที่ความมหัศจรรย์เกิดขึ้น renderer จะถูกเรียกสำหรับทุกเส้นทางที่ส่งคืนโดย routes
จะต้องส่งคืนวัตถุด้วยค่าต่อไปนี้:
- html: string, // ผลลัพธ์ของการเรนเดอร์ state: object // สถานะหลังการเรนเดอร์ (ไม่บังคับ)}
การแปลงจะได้รับสถานะที่อัปเดตซึ่งส่งคืนที่นี่
kit.transform(transformFn, opts) พุชการแปลงไปยังรายการการแปลง Stakit ใช้ documentify และ streams เพื่อสร้าง HTML
สิ่งเหล่านี้ถูกเรียกหลังจากแทนที่เนื้อหาที่แสดงผลใน HTML แล้ว
ดูการแปลงสำหรับข้อมูลเพิ่มเติม
kit.output(writerObject) เริ่มต้น build ไปป์ไลน์และสิ้นสุดด้วยการส่งผ่านเส้นทางทั้งหมดไปยัง writerObject.write({ destination, stream }) ส่งคืน Promise ที่รอจนกว่าไฟล์ทั้งหมด (เส้นทางและสแตติก) จะถูกเขียนอย่างสมบูรณ์
ตามค่าเริ่มต้น จะใช้ Writer ที่ส่งออกไซต์ไปยังไดเร็กทอรี ./public public
ดูนักเขียนสำหรับข้อมูลเพิ่มเติม
มิดเดิลแวร์ในตัว:
stakit.state(extendState) ยูทิลิตี้ที่จะช่วยคุณในการเพิ่มค่าให้กับ context.state
kit.use(stakit.state({ ข้อความ: 'สวัสดีตอนเช้า!' }))stakit.copy(files)มิดเดิลแวร์สำหรับการคัดลอกไฟล์ไปยังไดเร็กทอรีเอาต์พุต
// คัดลอกไฟล์ไปยังตำแหน่งเดียวกัน kit.use(stakit.copy([ 'robots.txt' ]))// คัดลอกไฟล์ไปยังตำแหน่งอื่นภายในเอาต์พุต pathkit.use(stakit.copy({
'robots.txt': 'robots.txt',
'sitemap.xml': 'sitemaps/sitemap.xml'})) Documentify มีประสิทธิภาพมากและสามารถปรับได้อย่างง่ายดาย รูปแบบทั่วไปของการแปลง Stakit คือ:
// ห่อด้วย functionfunction lang (บริบท) {
// ส่งคืนการแปลงเอกสาร
ฟังก์ชั่น return (lang) {// ส่งคืนกระแสการแปลง ส่งคืน hstream ({ html: { lang: lang } })
- หมายเหตุ: hstream เป็นเพื่อนที่ดีมาก!
การแปลง documentify ถูกรวมไว้ในฟังก์ชัน ดังนั้นเราจึงสามารถรับ context เมื่อเราต้องการ โดยไม่ต้องยุ่งกับ API ของ documentify หากคุณต้องการหลีกเลี่ยงสิ่งนี้ คุณสามารถคืนค่าการแปลง documentify จากฟังก์ชันได้
ดูว่าการเปลี่ยนแปลงใดที่มาพร้อมกับ Stakit ใน transforms/readme.md
ผู้เขียนส่งออกไฟล์สแตติกที่สร้างขึ้นและแปลงแล้ว สิ่งนี้อาจแตกต่างกันไปตั้งแต่การส่งออกไปยังระบบไฟล์ไปจนถึงการใส่ลงในไฟล์เก็บถาวร Dat
ผู้เขียนจะต้องใช้วิธีการ: write . สำหรับทุกไฟล์ รวมถึงเพจที่สร้างขึ้น + ไฟล์ที่เพิ่มใน context._files , writer.write จะถูกเรียกพร้อมกับอ็อบเจ็กต์ไฟล์ ควรส่งคืน Promise ที่ส่งคืนหลังจากไปป์ถูกล้าง (ไฟล์ถูกเขียนอย่างสมบูรณ์)
วัตถุไฟล์มีลักษณะดังนี้:
{
source: null | string,
destination: string,
stream: Stream
}ขอแนะนำให้ล้างไดเร็กทอรีเอาต์พุตก่อนทุกบิลด์
ดูตัวอย่างเมธอด stakit.writeFiles ในตัว
นั่นคือทั้งหมดที่เกี่ยวกับนักเขียน
choo - เฟรมเวิร์กส่วนหน้าขนาด 4kb ที่แข็งแกร่ง
documentify - ตัวรวม HTML แบบโมดูลาร์
jalla - เว็บคอมไพเลอร์และเซิร์ฟเวอร์ที่รวดเร็วปานสายฟ้าในหนึ่งเดียว (ขอบคุณสำหรับข้อมูลโค้ดจำนวนมาก!)