jus 是一款开发服务器和构建工具,无需进行任何配置和样板代码即可制作静态网站。它内置支持 browserify、使用 Babel 的 ES6 和 ES2015、React JSX、GitHub 风味的 Markdown、语法高亮、Sass、Less、Stylus、Myth、Handlebars、browsersync 等。
现在是 2016 年,你正在构建一个新网站。一开始你只需要创建一个带内嵌脚本和样式标记的 HTML 文件。刚开始还可以,但是很快你的代码就会增长,你决定将样式和脚本提取到独立的文件中。效果稍好一些,但最终你会想要做更复杂的事情,比如用 Sass 编写样式表,或连接和缩小资源,或使用 npm 依赖项和 browserify。这些便利对构建任何规模的网站都至关重要,但设置起来既乏味又费时。这时你对项目的关注就会从创造性转向乏味。你停止构建,开始配置。
在当今时代,大多数开发人员会求助于 Gulp、npm 脚本、Jekyll 或 数十种静态站点工具 中的一种。这就是 jus 作为替代品出现的地方。
jus 没有安装。它只有两个命令:serve
和 build
。在项目目录中运行 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 Pages、Surge,或者支持纯净 URL 的其他任何静态网站主机上。
jus 要求使用 node 4 或更高版本,因为它使用了较新的 Javascript 功能。全局安装命令行界面,然后运行它以下载使用说明
npm i -g jus && jus
jus 有很多依赖项,所以安装它需要一段时间。也许您可以先去喝杯 :coffee:,同时学习一下 如何提升 npm 速度。
如果您喜欢通过案例学习,请查看 使用 jus 的网站 的仓库。否则,继续往下看...
网页以 Markdown、HTML、Handlebars 或这些格式的任意组合书写。在渲染时,将向每个页面传递一个 Handlebars 上下文对象,其中包含目录中所有文件的元数据。
H1
、H2
等)自动转换为带锚点的超链接。扩展名:html|hbs|handlebars|markdown|md
项目中所有的 Javascript 文件都会使用 es2015
和 react
预设自动 browserified 和 babelified。
您可以使用 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
样式表可以用 Sass、SCSS、Less、Stylus、Myth 或老式的 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 包含 比较帮助器,如 endsWith、eq、gt、gte、includes、isArray、isBoolean、isDate、isEmpty、isMatch、isNumber、isString、isSymbol、isUndefined、lt、lte、startsWith 等等。
以下是 gte
(大于或等于)帮助器的示例用法
\{{#gte age 21}}
You are old enough to drink in the United States.
\{{/gte}}
lobars 还提供用于处理输入的助手,例如 camelCase、capitalize、escape、kebabCase、lowerCase、lowerFirst、pad、padEnd、padStart、parseInt、repeat、replace、snakeCase、split、startCase、template、toLower、toUpper、trim、trimEnd、trimStart、truncate、unescape、upperCase、upperFirst 等等。
以下是使用字符串助手的教程。
\{{lowerCase someString}}
从图片中提取美味的元数据并将其包含在 handlebars 上下文对象 中,该对象可用于每个页面。
扩展名:png|jpg|gif|svg
JSON 和 YML 文件被替换到 handlebars 上下文对象 中,该对象可用于每个页面。
扩展名:json|yaml|yml
jus 使用与 GitHub Pages 和 surge.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 |
将以下内容添加到你的 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.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 受许多现有工具的启发
有时,真实示例是最简单的学习方式。查看这些使用 jus 构建的开源站点
查找更多静态站点生成器。