讓我們談談 Jamstack 的未來 — 加入我們

jus

109 顆星
15 個分支
27 個議題
首頁
http://jus.js.org
儲存庫
jus/jus
語言
JavaScript
授權
MIT
範本
Handlebars

jus 是一個開發伺服器和建構工具,用於製作靜態網站,無需設定且無需樣板程式碼。它內建支援 browserify、使用 Babel 的 ES6 和 ES2015、React JSX、GitHub Flavored Markdown、語法高亮、SassLessStylusMythHandlebarsbrowsersync 等等。

為什麼?

現在是 2016 年,您正在建構一個新的網站。一開始,您只建立一個包含一些內聯腳本和樣式標籤的 HTML 檔案。這在一段時間內有效,但很快您的程式碼就會增加,而您決定將樣式和腳本提取到獨立的檔案中。這樣稍微好一點,但最終您想要做更複雜的事情,例如用 Sass 編寫樣式表,或連接和縮小資源,或使用 browserify 的 npm 相依性。這些便利性對於建構任何規模的網站都至關重要,但是設定它們既繁瑣又耗時。在專案的這一點上,您的注意力從創意轉向了平凡。現在您不是在建構,而是在設定。

在當今時代,大多數開發人員會轉向 Gulpnpm 腳本Jekyll數十個靜態網站工具之一。這就是 jus 作為替代方案出現的地方。

jus 沒有設定。它只有兩個命令:servebuild。在您的專案目錄中執行 jus serve,您就有一個正在運行的即時開發伺服器,監視檔案變更,使用 browsersync 自動重新整理您的瀏覽器,並使用乾淨 URL 提供您的內容。編寫一個 foo.sass 檔案,它將在 /foo.css 提供服務。在您的腳本中使用 npm 樣式的 require 語句,jus 會將其作為 browserified 套件提供。編寫 React 的 JSX 語法,它將即時轉換為 javascript。編寫一個 GitHub 風格的 /markdown/file.md,它將作為語法高亮顯示的 HTML 在 /markdown/file 提供服務。

當需要部署時,執行 jus build 將您的網站編譯成純 HTML、CSS 和 Javascript 檔案,準備部署到 GitHub PagesSurge 或任何其他支援乾淨 URL 的靜態網站主機。

開始使用

jus 需要 node 4 或更高版本,因為它使用了一些較新的 Javascript 功能。全域安裝命令行介面,然後執行它以查看使用說明

npm i -g jus && jus

jus 有很多相依性,因此安裝需要一些時間。也許去喝杯 :coffee: 並閱讀 如何使 npm 更快

如果您喜歡透過範例學習,請查看使用 jus 的網站的儲存庫。否則,請繼續閱讀...

頁面

頁面以 Markdown、HTML、Handlebars 或它們的任意組合編寫。在呈現時,每個頁面都會傳遞一個 Handlebars 上下文物件,其中包含目錄中所有檔案的中繼資料。

  • 使用 marky-markdown 進行 Markdown 解析,這是 npmjs.com 使用的久經考驗的 commonmark 相容解析器。
  • GitHub 風格的 Markdown 支援,包括 程式碼區塊
  • Atomhighlights 套件提供語法高亮顯示。
  • Markdown 標題 (H1H2 等) 會自動轉換為錨定超連結。
  • 表情符號支援。將 :emoji: 風格的快捷方式轉換為 unicode 表情符號。
  • HTML frontmatter 作為頁面中繼資料

副檔名:html|hbs|handlebars|markdown|md

腳本

您專案中的所有 javascript 檔案都會自動使用 es2015react 預設值進行 browserifiedbabelified

您可以使用 node 樣式的 require 語句將 node 和 npm 模組包含在您的程式碼中

const url = require('url').parse('https://example.com')

console.log(`the domain is ${url.host}`)

如果您願意,也可以使用 ES6 樣式的匯入

import React from 'react'
import ReactDOM from 'react-dom'
import domready from 'domready'

domready(() => {
  // do some React magic
})

腳本使用 babel-preset-react 進行 browserified,因此您可以在腳本中編寫 JSX。

副檔名:js|jsx|es|es6

樣式表

樣式表可以用 SassSCSSLessStylusMyth 或純 CSS 編寫。使用任何適合您的預處理器。

副檔名:css|less|sass|scss|styl

上下文

當初始化 jus 伺服器時,它會遞迴查找目錄樹中的所有檔案,忽略 node_modules.git 和其他不需要的模式。然後,這些檔案會以陣列形式儲存在記憶體中,稱為 files。為了方便起見,此檔案列表會按類型分為較小的陣列:pages 的陣列、scripts 的另一個陣列等等。

{
  files: [...],
  pages: [...]
  scripts: [...]
  stylesheets: [...]
  images: [...]
  datafiles: [...]
}

當您請求一個頁面時,伺服器會即時呈現該頁面,並將此物件傳遞到指定頁面的範本。這表示每個頁面都可以在呈現時存取網站中每個檔案的中繼資料。

在您的頁面中使用 handlebars 是完全可選的。如果您的頁面不需要在建構時進行任何動態呈現,這也沒關係。上下文將在呈現時被忽略。

Frontmatter

jus 支援 HTML frontmatter。這允許您將鍵值中繼資料新增至您的頁面

<!--
title: Alice in Wonderland
year: 1951
-->

頁面頂端的 HTML 註解中存在的任何此類值都可在該頁面的Handlebars 上下文物件 中於呈現時使用。

注意:Jekyll 使用 YAML 作為 frontmatter,但 jus 使用 HTML,因為它可以包含在檔案中,而不會對其在 github.com 上的呈現方式產生不利影響。

範本

Handlebars 範本可用於在您的頁面周圍包裝版面配置。

  • 如果存在名為 /layout.(html|hbs|handlebars|markdown|md) 的檔案,則預設會將其套用至所有頁面。
  • 範本必須包含 {{{body}}} 字串,用作應呈現主要內容的預留位置。
  • 範本的檔案名稱中必須有 layout 這個字。
  • 頁面可以在其 frontmatter 中指定自訂版面配置。指定 layout: foo 將參照 /layout-foo.(html|hbs|handlebars|markdown|md) 版面配置檔案。
  • 頁面可以透過在其 frontmatter 中設定 layout: false 來停用版面配置。

副檔名:html|hbs|handlebars|markdown|md|mdown

輔助函數

jus 提供了一些您可以在 handlebars 範本中使用的輔助函數。所有輔助函數都來自 lobars,這是直接從 lodash 中提取的公用程式函數集合。

lobars 包含比較輔助函數,例如 endsWitheqgtgteincludesisArrayisBooleanisDateisEmptyisMatchisNumberisStringisSymbolisUndefinedltltestartsWith 等等。

以下是 gte(大於或等於)輔助函數的範例用法

\{{#gte age 21}}
  You are old enough to drink in the United States.
\{{/gte}}

lobars 也提供用於操作輸入的輔助函數,例如 camelCasecapitalizeescapekebabCaselowerCaselowerFirstpadpadEndpadStartparseIntrepeatreplacesnakeCasesplitstartCasetemplatetoLowertoUppertrimtrimEndtrimStarttruncateunescapeupperCaseupperFirst 等等。

以下是如何使用字串輔助函數

\{{lowerCase someString}}

影像

從影像中提取出的美味中繼資料會包含在Handlebars 上下文物件中,每個頁面都可以存取該物件。

副檔名:png|jpg|gif|svg

資料檔案

JSON 和 YML 檔案會載入Handlebars 上下文物件,每個頁面都可以存取該物件。

副檔名:json|yaml|yml

乾淨 URL

jus 使用與 GitHub Pagessurge.sh 相容的乾淨 URL 策略。實質上,頁面會將其副檔名去除,而名為 index 的頁面會繼承其目錄的名稱。

檔案名稱 網址
index.html /
nested/index.html /nested
nested/page.html /nested/page
also/markdown.md /also/markdown
also/handlebars.hbs /also/handlebars
stylesheet.scss /stylesheet.css
stylesheet.sass /stylesheet.css
stylesheet.styl /stylesheet.css
stylesheet.styl /stylesheet.css

部署到 GitHub Pages

將以下內容新增至您的 package.json

{
  "scripts": {
    "start": "jus serve",
    "deploy": "npm run build && npm run commit && npm run push && npm run open",
    "build": "jus build . dist",
    "commit": "git add dist && git commit -m 'update dist'",
    "push": "git subtree push --prefix dist origin gh-pages",
    "open": "open http://zeke.sikelianos.com"
  }
}

現在,只要您想發佈到 GitHub Pages,就執行

npm run deploy

注意:GitHub 的 使用者頁面(例如 yourname.github.io)是從 master 分支建構的,而 專案頁面(例如 yourname.github.io/project)是從 gh-pages 分支建構的。在設定 npm 腳本時請注意這一點。

注意:GitHub 的 CDN 可能需要一分鐘才能更新,因此在訪問時可能需要重新整理幾次。

部署到 Surge

surge.sh 是一個發佈靜態網站的超棒新平台。

安裝 Surge CLI

 npm i -g surge

將以下內容新增至您的 package.json

{
  "scripts": {
    "start": "jus serve",
    "deploy": "npm run build && npm run build && npm run open",
    "build": "jus build . dist",
    "push": "surge dist YOUR-URL",
    "open": "open YOUR-URL"
  }
}

現在,只要您想發佈到 Surge,就執行

npm run deploy

先例

jus 的靈感來自許多現有工具

  • Harp:jus 的主要靈感來源。它是第一個引入就地資源管線概念的靜態網站工具。
  • Jekyll:一個使用 Ruby 編寫、具備部落格功能的靜態網站產生器。jus 從 Jekyll 借用 frontmatter 的概念,但使用 HTML frontmatter,這與 Jekyll 的 YAML frontmatter 不同。
  • Brunch:一個用於建構 HTML5 應用程式的輕量級工具,重點在於優雅和簡潔。jus 開發伺服器使用來自 Brunch 的 chokidar 模組來監視檔案系統。
  • Ruby on Rails:這個網頁開發框架幫助普及了慣例優於設定的概念

使用 jus 的網站

有時候真實範例是學習最簡單的方式。看看這些用 jus 建立的開源網站

尋找更多靜態網站產生器