เทมเพลตเว็บไซต์สำหรับเว็บสมัยใหม่
ประสบการณ์นักพัฒนาอันทรงพลังพบกับผลลัพธ์ที่มีน้ำหนักเบา
การสร้างไซต์คงที่ที่ง่ายดายพร้อมความยืดหยุ่น
รู้สึกหนักใจกับภูมิทัศน์ตัวสร้างไซต์แบบคงที่ใช่ไหม Refo นำเสนอแนวทางที่เรียบง่ายและปรับแต่งได้ ซึ่งสร้างขึ้นบน Node.js ทั้งหมด
ซึ่งแตกต่างจาก Jekyll, Gatsby, Astro และอื่นๆ เราให้คุณใช้ประโยชน์จากพลังของโมดูล Node.js ได้โดยตรง ซึ่งหมายความว่าคุณสามารถสร้างเว็บไซต์ประเภทใดก็ได้ที่คุณสามารถจินตนาการได้ ทั้งหมดนี้ด้วยความยืดหยุ่นของไลบรารีและเซิร์ฟเวอร์ Node.js ที่คุณชื่นชอบ
ประโยชน์ที่สำคัญ:
SVG
ใช้การนำเข้า raw
และ style
ส่วนประกอบของคุณได้อย่างง่ายดายก้าวข้ามขีดจำกัดของเครื่องมือสร้างไซต์แบบสแตติกแบบเดิมๆ โอบรับพลังและความยืดหยุ่นของ Refo สำหรับโครงการต่อไปของคุณ!
️ติดดาวสนับสนุนผลงานเราได้เลย!
รับการแจ้งเตือนเกี่ยวกับการเปิดตัวใหม่ผ่านทางอีเมล
raw
a
, b
, c
, ..., aa
, ab
, ...)development
โดยใช้ stack-tracerMarkdown
สำหรับสตริงในไฟล์ JSON
ที่มี markdown-itPDF
นักเชิดหุ่นพร้อมตัวค้นหาโครเมียม JSON
PDF
document
HTML
และหรือเป็นหน้าบนเว็บไซต์HTML
และ CSS
PDF
1 ไฟล์ขึ้นไปที่รองรับรูปแบบที่แตกต่างกัน เช่น Letter
และ A4
PDF
หลังจากบันทึกการเปลี่ยนแปลงเพื่อดู PDF
ที่เป็นปัจจุบัน ติดตั้งการพึ่งพา:
pnpm install
คุณใช้ระบบที่ใช้ Unix หรือไม่? แม็ก? ลินุกซ์? หากเป็นเช่นนั้น คุณอาจต้องการเปลี่ยน
port
ในโมดูลindex
ซึ่งตั้งค่าเป็น80
ซึ่งใช้งานได้บน Windows ค่าเริ่มต้นของ Superstatic คือ3474
ดังนั้นคุณจึงสามารถลบออกได้หากต้องการ
เริ่มเซิร์ฟเวอร์ในโหมดการพัฒนา:
pnpm dev
เยี่ยมชม http://localhost/ เพื่อเข้าถึงเว็บไซต์
สร้างไซต์แบบคงที่:
pnpm static
เปิด index.html
ภายในโฟลเดอร์ static
เพื่อเข้าถึงเว็บไซต์
import | ไฟล์ที่สร้างขึ้น | |
---|---|---|
ดัชนี/ | static / | |
• favicon .ico ( file ไอคอน (โมดูล Node.js)) | • favicon .ico | |
• main .js .js ( module Node.js ) | • .js | |
• ดัชนี .html .jsx ( module Node.js ) | • ดัชนี .html | |
firebase .json .js ( module Node.js) | ไฟร์เบส .json |
file
ที่นำเข้า (ซึ่งมีนามสกุลไฟล์ที่แน่นอน (ico
,png
)) (Node.js) โมดูล) จะคัดลอกไฟล์ลงในโฟลเดอร์static
เมื่อโมดูลถูกโหลด ในโหมดการอ่านโมดูล พวกเขาจะลบออกหากไม่ได้นำเข้าอีกต่อไป
export
default
ของmodule
(Node.js) (ซึ่งมีนามสกุลไฟล์บางอย่าง (js
,json
,html
) ในชื่อไฟล์ฐาน) จะถูกเขียนเป็นเนื้อหาของไฟล์เอาต์พุต (ลงในโฟลเดอร์static
) ชื่อไฟล์เต็มของไฟล์เอาต์พุตคือชื่อไฟล์พื้นฐานของmodule
(Node.js)
️ติดดาวสนับสนุนผลงานเราได้เลย!
ดัชนี .html
.jsx
( import
module
ed ):
import template from '#@SolidJS/template'
import use from '#@style'
const [ { styled } , extract ] = use ( )
const Body = styled . body `
font-weight: bold;
`
export default < >
{ template ( `<!DOCTYPE HTML>` ) }
< html lang = "en" >
{ template ( `<head>` ) }
< style > { extract ( ) } </ style >
{ template ( `</head>` ) }
< Body >
example content
</ Body >
</ html >
</ >
ดัชนี .html
(ไฟล์ที่สร้างขึ้น):
<!DOCTYPE HTML > < html lang = en > < head > < style > .a{font-weight:700} </ style > </ head > < body class = a > example content </ body > </ html >
คุณสามารถปรับใช้โฟลเดอร์ docs
คงที่ได้เหมือนเดิม
คุณอาจต้องการเปลี่ยน prefixum
ในไฟล์ต่อไปนี้ตามชื่อของที่เก็บ project site
ของคุณ: index/index/site/
main/
index/resume/index/index
คุณสามารถลบ prefixum
ออกได้อย่างสมบูรณ์ในกรณีที่คุณกำลังเผยแพร่ user or an organization site
prefixum
ออกจากไฟล์ที่แสดงด้านบนภายใต้การปรับใช้เพจ GitHub.firebaserc
ด้วยรหัสโปรเจ็กต์ Firebase ของคุณ: {
"projects" : {
"default" : " <projectId> "
}
}
ทำให้ไซต์ของคุณใช้งานได้กับ Firebase Hosting:
pnpm deploy
การแยกเทมเพลตเรซูเม่และเผยแพร่เป็นแพ็คเกจ Refo ใหม่อาจมีประโยชน์
เปิดประเด็นใหม่หากคุณคิดเช่นนั้นและมาหารือเรื่องนี้กัน เราสามารถนำสิ่งนี้ไปใช้ได้อย่างแน่นอนหากพบว่ามีประโยชน์
ตัวอย่างนี้ใช้ตัวจัดการ JSON ของ Refo ดังนั้นคุณจึงสามารถควบคุมวิธีการและไม่ว่าจะแสดงคุณสมบัติบางอย่างจากไฟล์ index/index/site/index/resume/data.js ตามที่อธิบายไว้ใน readme ของ Refo ที่ส่วนการใช้งานตัวจัดการ JSON
โครงการนี้ใช้ superstatic เพื่อให้บริการไฟล์คงที่ที่สร้างขึ้น คุณสามารถใช้ไลบรารีที่คล้ายกันเพื่อให้บริการไฟล์หรือไม่ใช้ไลบรารีเลยก็ได้ ในกรณีที่คุณต้องการเรียกดูไฟล์โดยตรง สิ่งนี้อาจมีประโยชน์สำหรับเอกสารออฟไลน์เป็นต้น
คุณสามารถลบ superstatic และใช้เครื่องมือ firebase แทน (ซึ่งใช้ superstatic) ได้หากต้องการ ในกรณีนี้ คุณสามารถแก้ไข scripts
ในไฟล์ package.json
และแทนที่ superstatic
ด้วยคำสั่ง firebase serve
ได้
โปรเจ็กต์นี้ใช้พร้อมกันเพื่อรัน Refo ในโหมดดูและให้บริการไฟล์แบบซูเปอร์สแตติก คุณสามารถใช้ไลบรารีที่คล้ายกันเช่น npm-run-all เพื่อรัน Refo และเซิร์ฟเวอร์แบบขนานหรือไม่มีไลบรารีเลย หากคุณไม่ต้องการไฟล์เซิร์ฟเวอร์
ไฟล์ firebase.json
สามารถตั้งชื่อเป็น superstatic.json
ได้หากต้องการ เทมเพลตนี้ไม่ได้ขึ้นอยู่กับ Firebase เอง อย่างไรก็ตาม พวกเขาให้หนึ่งในโซลูชันโฮสติ้งแบบคงที่ที่เร็วที่สุดอย่างต่อเนื่อง
ตัวอักษรเทมเพลต JavaScript ใช้สำหรับการสร้างเทมเพลตเอกสาร HTML
ตัวอย่างนี้ยังใช้แท็กทั่วไปในบางเทมเพลตซึ่งอนุญาตให้ใช้ไวยากรณ์ที่สั้นกว่าในหลายกรณี
ต่อไปนี้เป็นสถานการณ์บางส่วนที่ใช้กันทั่วไปในตัวอย่างนี้:
ตามค่าเริ่มต้น คุณสามารถแสดงค่าที่ไม่บังคับและใช้ตัวดำเนินการตามเงื่อนไขเพื่อป้องกันการแสดงค่าเท็จ เช่น undefined
เช่น:
module . exports = `
${ item ? item : '' }
`
แท็กทั่วไปทำสิ่งนี้เพื่อคุณ ดังนั้นคุณจึงใช้ไวยากรณ์ที่สั้นลงพร้อมกับแท็กเทมเพลตลิเทอรัลได้:
const { html } = require ( 'common-tags' )
module . exports = html `
${ item }
`
ตามค่าเริ่มต้น คุณสามารถแสดงส่วนเทมเพลตเสริมได้ และใช้ตัวดำเนินการแบบมีเงื่อนไขเพื่อป้องกันการแสดงค่าเท็จ เช่น undefined
เช่น:
module . exports = `
${ item ? `
<div>
` + item + `
</div>
` : '' }
`
ด้วยแท็กทั่วไป คุณสามารถใช้เงื่อนไขง่ายๆ กับตัวดำเนินการเชิงตรรกะเพื่อให้ได้สิ่งเดียวกัน:
const { html } = require ( 'common-tags' )
module . exports = html `
${ item && `
<div>
` + item + `
</div>
` }
`
ตามค่าเริ่มต้น คุณสามารถ join
ผลลัพธ์ได้เมื่อวนซ้ำอาร์เรย์ของรายการเพื่อป้องกันการแสดงลูกน้ำระหว่างรายการที่ส่งคืน:
module . exports = `<section>
${ items . map ( item => `
<div>
${ item }
</div>
` ) . join ( '' ) }
</section>`
แท็กทั่วไปทำสิ่งนี้เพื่อคุณ ดังนั้นคุณสามารถใช้ไวยากรณ์ที่สั้นลงได้:
const { html } = require ( 'common-tags' )
module . exports = html ` < section >
${ items . map ( item => `
<div>
${ item }
</div>
` ) }
</ section > `
เมื่อคุณไม่ได้ใช้ลิเทอรัลเทมเพลตที่ติดแท็กด้วยแท็กทั่วไปหรือกับไลบรารีที่คล้ายกัน คุณสามารถเชื่อมส่วนเทมเพลตเข้ากับตัวดำเนินการ +
ได้ หากคุณต้องการ:
module . exports = `
<div>
` + item + `
</div>
`
หรือคุณสามารถใช้ตัวยึดตำแหน่งที่มีไวยากรณ์ ${expression}
แทน:
module . exports = `
<div>
${ item }
</div>
`
ในบางกรณี รูปแบบใดรูปแบบหนึ่งสามารถอ่านได้ง่ายกว่ารูปแบบอื่น ดังนั้นคุณอาจใช้สไตล์ตามบริบทหรือคุณสามารถเลือกรูปแบบใดรูปแบบหนึ่งและคงความสม่ำเสมอได้ ตัวอย่างนี้ใช้ทั้งสองอย่าง
ตัวอย่างเช่น โปรแกรมแก้ไขโค้ดบางตัว เช่น Atom และ GitHub จะเน้นตัวอักษรเทมเพลตที่แท็ก html
เป็น HTML ดังที่คุณเห็นด้านบนเช่นกัน
Preferencies / Package Settings / JS Custom / Settings
JS Custom.sublime-settings — User
: {
"configurations" : {
"jsx" : true
, "custom_templates" : {
"styled_components" : true
, "lookaheads" : {
" \ <" : " scope:text.html.basic "
, " \ .|height|padding|margin" : " scope:source.js.css "
, "import|minify|await|export|if|window| \ (|," : " scope:source.js "
}
, "tags" : {
"injectGlobal" : " scope:source.js.css "
, "css" : " scope:source.js.css "
, "html" : " scope:text.html.basic "
}
}
}
}
ตอนนี้คุณสามารถใช้ตัวเลือก JS Custom - Default
สำหรับไฟล์ JavaScript
ตัวจัดการ JSON เป็นแพ็คเกจแบบสแตนด์อโลน ส่วนใหญ่จะมีประโยชน์ในการจัดการข้อมูลที่เกี่ยวข้องกับเรซูเม่ แต่คุณสามารถใช้เพื่อสิ่งอื่นได้เช่นกัน
คุณสามารถใช้มันได้ตามที่เห็นในตัวอย่าง (asset/resume/getHandledJson.js) เช่นกัน:
const handleJSON = require ( 'refo-handle-json' )
var json = JSON . parse ( JSON . stringify ( require ( './data' ) ) )
json = handleJSON ( json )
ขอแนะนำให้สร้างสำเนาของ JSON ที่จำเป็นโดยใช้ฟังก์ชัน JSON.parse(JSON.stringify(json))
เช่น เมื่อคุณใช้ Refo ในโหมด watch
(ความคิดเห็นที่เกี่ยวข้อง) เนื่องจากตัวจัดการ JSON กำลังเปลี่ยนแปลงคุณสมบัติของอ็อบเจ็กต์
ตัวจัดการ JSON กำลังแยกวิเคราะห์ค่าวัตถุสตริงเป็น Markdown
โดยใช้ markdown-it ตัวอย่าง: example/asset/resume/data.json#L7
คุณสมบัติที่ลงท้ายด้วย -private
ได้แก่ ลบออก - ตัวอย่าง: example/asset/resume/data.json#L4
วัตถุที่มีคุณสมบัติชื่อ private
จะถูกลบออกด้วย
คุณสมบัติที่ลงท้ายด้วย -full
จะถูกรวมเฉพาะเมื่อมีการส่งพารามิเตอร์ค่าจริงตัวที่สองไปยังฟังก์ชันตัวจัดการเท่านั้น ตัวอย่าง: example/asset/resume/data.json#L8, example/asset/resume/getHandledJson.js#L9
ออบเจ็กต์ที่มีคุณสมบัติชื่อ full
จะถูกรวมเฉพาะเมื่อพารามิเตอร์ค่าจริงตัวที่สองถูกส่งผ่านไปยังฟังก์ชันตัวจัดการ
เมื่อออบเจ็กต์มีคุณสมบัติ startDate
โดยไม่มีคุณสมบัติ endDate
ก็สามารถใช้คุณสมบัติ hidePresent
เพื่อซ่อนป้ายกำกับปัจจุบันและแสดงปีปัจจุบันแทนได้
คุณสมบัติ hideEndDate
สามารถใช้เพื่อซ่อนปีปัจจุบันที่แสดงแทนป้ายกำกับปัจจุบัน
คุณสมบัติ hideDuration
สามารถใช้เพื่อซ่อนระยะเวลาที่คำนวณได้ มิฉะนั้น คุณสมบัติ duration
จะถูกกำหนดด้วยระยะเวลาที่คำนวณได้ (ตัวอย่าง: 7 เดือน, 1 ปี, 1.5 ปี, 2 ปี)
การสร้างเอกสารเชิงลึกเกี่ยวกับแพ็คเกจ Refo แต่ละแพ็คเกจอาจเป็นประโยชน์
เปิดประเด็นใหม่หากคุณคิดเช่นนั้นและมาหารือเรื่องนี้กัน เราสามารถนำสิ่งนี้ไปใช้ได้อย่างแน่นอนหากพบว่ามีประโยชน์
เสนอการเปลี่ยนแปลงไฟล์เพื่อเพิ่มโครงการของคุณที่นี่
เรื่อง + พอร์ต สำหรับ lio = Refo