让我们讨论一下 Jamstack 的未来——加入我们

jus

109
15 分叉
27 问题
主页
http://jus.js.org
仓库
jus/jus
语言
JavaScript
许可证
MIT
模板
Handlebars

jus 是一款开发服务器和构建工具,无需进行任何配置和样板代码即可制作静态网站。它内置支持 browserify、使用 Babel 的 ES6 和 ES2015、React JSX、GitHub 风味的 Markdown、语法高亮、SassLessStylusMythHandlebarsbrowsersync 等。

为什么?

现在是 2016 年,你正在构建一个新网站。一开始你只需要创建一个带内嵌脚本和样式标记的 HTML 文件。刚开始还可以,但是很快你的代码就会增长,你决定将样式和脚本提取到独立的文件中。效果稍好一些,但最终你会想要做更复杂的事情,比如用 Sass 编写样式表,或连接和缩小资源,或使用 npm 依赖项和 browserify。这些便利对构建任何规模的网站都至关重要,但设置起来既乏味又费时。这时你对项目的关注就会从创造性转向乏味。你停止构建,开始配置。

在当今时代,大多数开发人员会求助于 Gulpnpm 脚本Jekyll数十种静态站点工具 中的一种。这就是 jus 作为替代品出现的地方。

jus 没有安装。它只有两个命令:servebuild。在项目目录中运行 jus serve,你就会有一个实时的开发服务器在运行,监视文件更改,使用 browsersync 自动刷新你的浏览器,并通过 clean URLs 提供你的内容。写一个 foo.sass 文件,它会以 /foo.css 的形式提供。在你的脚本中使用 npm 风格的 require 语句,jus 将作为浏览器化包提供它。写 React 的 JSX 语法,它会立即转换成 JavaScript。写一个 GitHub 风格的 /markdown/file.md,它会在 /markdown/file 以语法高亮的 HTML 提供。

在进行部署时,运行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,这是一个经过实战考验的且符合 commonmark 规范的解析器,由 npmjs.com 使用。
  • 支持 GitHub 风格 Markdown,包括 带边框的代码块
  • 语法高亮由 Atomhighlights 包提供支持。
  • Markdown 标题(H1H2 等)自动转换为带锚点的超链接。
  • 支持 Emoji。将 :emoji: 风格的快捷方式转换为 Unicode 表情。
  • HTML 前端 作为页面元数据

扩展名: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: [...]
}

请求页面时,服务器实时呈现页面,并将此对象传递给给定页面的模板。这意味着,每个页面都可以访问渲染时站点中每个文件元数据。

页面中使用手柄模板完全是可选项。如果页面不需要在构建时执行任何动态呈现,则无需担心。在渲染时,系统会简单忽略上下文。

页眉数据

jus 支持 HTML 页眉数据。这允许你将键值元数据添加到页面中。

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

页面顶部 HTML 注释中存在的此类值可在渲染时使用该页面的 手柄上下文对象 中。

注意:Jekyll 使用 YAML 作为页眉数据,但 jus 使用 HTML,因为它可在文件内包含,而不影响它在 github.com 上的渲染方式。

模板

可使用手柄模板将布局包装到页面周围。

  • 如果存在名为 /layout.(html|hbs|handlebars|markdown|md) 的文件,则默认情况下会将其应用于所有页面。
  • 模板必须包含字符串 {{{body}}},用作主要内容将要渲染到的占位符。
  • 模板的文件名中必须带有词语 layout
  • 页面可以在其 页眉数据 中指定自定义布局。指定 layout: foo 将引用 /layout-foo.(html|hbs|handlebars|markdown|md) 布局文件。
  • 页面可以通过在其页眉数据中设置 layout: false 来禁用布局。

扩展名:html|hbs|handlebars|markdown|md|mdown

帮助器

jus 为你可以手柄模板中使用的多种帮助器函数提供支持。所有帮助器都来自 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 的页面继承了其目录的名称。

文件名 URL
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:帮助普及了约定优于配置这一概念的 Web 开发框架

使用 jus 的站点

有时,真实示例是最简单的学习方式。查看这些使用 jus 构建的开源站点

查找更多静态站点生成器