docpad建站记录
记一下用docpad建站的过程作为备忘。不定时更新
why docpad
wordpress对我来说太过于臃肿,我就想要个代码干净的小站来写东西。想要个markdown为基础的静态站。 比较流行的Static Site Generator应该是github的Jekyll。但现在的静态站生成器还挺多的,我在github上找到了一个静态站生成器的清单。
于是我挑了比较有亲切感的nodejs作为驱动~选了里面似乎用的人最多的那个。 用了之后觉得定制性好强!
start up 流程
安装和初始化
$ npm install -g docpad
更新的时候: $ rm -Rf node_modules; npm install 启动docpad: 进入到站点目录 $ docpad run
第一次启动的时候,初始化: $ docpad init 按提示一步步来,还可以选择最初的架构,bootstrape,HTML5 Boilerplate之类的
安装插件
接下来捏,要安装渲染用的插件;比如eco和marked;还有其他的模板可以用,全部的渲染插件清单.
除了渲染外,还有许多增强功能的插件可以用,例如代码高亮、可以用来代码模块化的partial等等;
我需要安装的插件
npm install --save docpad-plugin-livereload docpad-plugin-eco docpad-plugin-marked docpad-plugin-partials docpad-plugin-highlightjs docpad-plugin-services
具体都是干嘛的稍后说。
配置
config
配置文件为根目录下的docpad.coffee,也可以使用js或者json来写;js或者coffee的好处是可以写方法。 里面定义了运行时的各种目录、设置;例如可以修改导出的目录:
# Out Path
# Where should we put our generated website files?
# If it is a relative path, it will have the resolved `rootPath` prepended to it
outPath: 'out' # default
还有帮助模板渲染用的helper方法及自定义变量:
templateData: # example
# Specify some site properties
site:
# The production url of our website
url: "http://website.com"
# The default title of our website
title: "Your Website"
目录结构及用途
以我自己的站点目录为例:
+ node_module //存放各种模块
+ src //源码目录,主工作区~ 里面的东西会经过编译后生成静态页面,导出到out文件夹内
+ documents
+ styles //样式文件+字体
+ scripts //脚本
+ posts //这三个是我自己定义的目录,用来做为我文档的归类
+ techs
+ docpad建站记录.html.md
+ trans
+ files //一些额外的东西,例如图标啦404 humans.txt之类
+ layouts //模板存放
+ index.html.eco
+ ...
+ partials //安装partials插件后,复用的模块模板在这里定义
+ head.html
+ header.html.eco
+ ...
+docpad.coffee //这是配置文件,用coffeescript写
markdown文档
在documents下写md文档,类似于*.html.md的后缀,在渲染时就会从md转为html. markdown文件的开头会写具体的meta:
---
title : 'Docpad建站记录'
isPage : true
---
这里写的meta值在模板里可以取到;可以自定义;除写明的meta外,每个文件还会有自己默认的一些定义,参见Docpad Meta Data。下文中的relativeOutDirPath便是其中之一;
除此之外,docpad还提供了一系列的helper方法(也可以自己写,在配置文件docpad.coffee里写),帮助搭建。Docpad Template Data & Helper.
模板(eco)
eco模板类似于下面的样子:
<ul>
<% for page in @getCollection("pages").toJSON(): %>
<li>
<a class="<%= if page.id is @document.id || page.pack is @document.relativeOutDirPath then 'active' else 'inactive' %>" href="<%= page.url %>">
<i class="icon-<%= page.icon %>"></i> <%= page.title %>
</a>
<%if page.pack: %>
<a href="<%= if !@document.isPage then '../'%><%= page.pack%>.xml" class="rss">
<i class="icon-rss"></i>
</a>
<%end%>
</li>
<% end %>
</ul>
组织文章的方法我是在这篇博文里学的ORGANIZING DOCPAD,顺便赞美下这位的站点设计。
posts: ->
@getCollection("html").findAllLive({relativeOutDirPath: 'posts'},[{date: -1}]).on "add", (model) ->
model.setMetaDefaults({layout: "post"})
techs: ->
@getCollection("html").findAllLive({relativeOutDirPath: 'techs'},[{date: -1}]).on "add", (model) ->
model.setMetaDefaults({layout: "post"})
trans: ->
@getCollection("html").findAllLive({relativeOutDirPath: 'trans'},[{date: -1}]).on "add", (model) ->
model.setMetaDefaults({layout: "post"})
RSS订阅
写xml的模板,然后生成各个目录下对应的xml;
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><%= @site.title %></title>
<link href="<%= @site.url %>/atom.xml" rel="self"/>
<link href="<%= @site.url %>"/>
<updated><%= @site.date.toISOString() %></updated>
<id><%= @site.url %></id>
<author>
<name><%= @site.author %></name>
<email><%= @site.email %></email>
</author>
<% for document in @getCollection('posts').toJSON(): %>
<entry>
<title><%= document.title %></title>
<link href="<%= @site.url+'/'+document.url %>"/>
<updated><%= document.date.toISOString() %></updated>
<id><%= @site.url+'/'+document.url %></id>
<content type="html"><%= document.contentRendered %></content>
</entry>
<% end %>
</feed>
我用的插件
Render(eco & maked)
即读取和渲染,不多写。
Services
集成了一些公共服务,例如google analytics, Disqus等等
partials
可以实现模块化; 在src目录下新建partials目录,里面存放复用的模板:例如header.html.eco
在模板要使用的地方写:
<%-@partial('header.html.eco', @)%>
后面的@是将本页面的数据传进partial;
liveReload
代码修改后docpad会立即重新生成,同时刷新浏览器中的页面。
代码高亮
选了个github主题配色~
部署
目前是使用github作为代码托管,干脆也直接用了他们家的page服务~
备注
comments
目前使用的是Disque。 Docpad也可以启用本地评论,但是需要服务器为nodejs驱动;
加密!
现在站点是托在github上,而目前docpad加密的方式需要server端为nodejs
TODO:
- 文章目录的自动生成和跳转
docpad建站记录的更多相关文章
- 《Dotnet9》建站-记录建站过程中使用的一些网址
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- 建站记录:设置apache .htaccess文件给网站添加404错误处理页面
有些空间服务商会在后台设置中,提供这个选项,可以直观地设置404错误指向的页面,这一点很方便,比如我之前用的阿里云虚拟主机就可以在控制台直接设置. 新租用的香港主机后台没有找到选取文件的地方,只是可以 ...
- 512MB内存VPS服务器安装宝塔WEB客户端建站 - 环境部署篇
原本以为我们很多网友用VPS搭建网站不会用WEB面板,而采用一键包或者自己部署编译环境,但是最后发现其实目前我们使用WEB面板的还是挺多的,无论是免费还是付费的都有不少人使用.比如当初一直免费的AMH ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- 关于WordPress建站的原理二三事
在写关于仿站文章详情页如何制作之前,我觉得有必要就一些原理性的问题,做一些说明.文章详情页的核心模块和首页有很多相似的地方,比如调用文章的标题.文章的内容.文章分类.作者等,实现起来都差不多,因此,了 ...
- 开发小白也毫无压力的hexo静态博客建站全攻略 - 躺坑后亲诉心路历程
目录 基本原理 方法1 - 本机Windows下建站 (力荐) 下载安装node.js 用管理员权限打开命令行,安装hexo-cli和hexo 下载安装git 初始化hexo 使用hexo gener ...
- Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么(转)
Web 建站技术中,HTML.HTML5.XHTML.CSS.SQL.JavaScript.PHP.ASP.NET.Web Services 是什么?修改 建站有很多技术,如 HTML.HTML5.X ...
- django笔记 - 建站
1,建站步骤:1)django-admin.exe startproject mysite 创建完后的目录结构: - mysite # 对整个程序进行配置 - init - settings # 配置 ...
- WordPress 建站教程:新手搭建 WordPress个人博客图文教程(完全版)
前言 WordPress 作为动态博客的代表,至今已经有十几年历史,而且一直在更新发展中,功能强大,插件和主题丰富,WordPress搭建使用也很方便.作为个人站长和博主,很多都是从 WordPres ...
随机推荐
- Java threadpool机制深入分析
简介 在前面的一篇文章里我对java threadpool的几种基本应用方法做了个总结.Java的线程池针对不同应用的场景,主要有固定长度类型.可变长度类型以及定时执行等几种.针对这几种类型的创建,j ...
- 获取select赋值
<select class="sel-ul-add" id="xuanzhe"> <option>A</option> &l ...
- [LeetCode]题解(python):140-Word Break II
题目来源: https://leetcode.com/problems/word-break-ii/ 题意分析: 给定一个字符串s和一个字典dict(set),将所有将s有字典dict组成的结果输出. ...
- jquery 小插件,完成“输入字段预期值的提示信息”,防html5 placeholder属性
前言:在很多时候,我们需要文本框中显示默认值,获取焦点时,文字框中就会清空给的值,当失去焦点时,如果没有值,继续显示默认的文字,如果有输入值,就显示输入的值.现在项目中需要用到这个地方的功能比较多,于 ...
- uber司机如何注册 uber司机详细注册流程
注意:本文驾驶证行驶证图片为本人拍摄,请广大网友勿作它用 转载请修改! 详细的介绍注册优步uber司机端步骤; uber对司机的要求: 车辆为本地牌照 车龄在5年以内 裸车价格在10万以上 目 ...
- android错误之==与equals的区别
在做一个电话号码匹配的时候, 开始我使用的是这种情况 if (num == inCall.getNum()) { //操作... } 但是无论如何结果都是false,就算两个号码打印出来一模一样还是f ...
- opengl模板缓冲区
相信大家有些人对opengl的模板缓冲区不是很理解,包括我最开始也是,opengl的模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制,那些不能进行绘制.这里的过滤技术也就是我们的一个控制方法,主 ...
- 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍
将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...
- xcode 工具栏中放大镜的替换的说明
1.如果是在打开的文档范围内: 查找: Command+ F 替换: Option+Command+F Replace All 是全部替 ...
- ADO接口
转自百度文库 ADO中最重要的对象有三个:Connection.Recordset和Command,分别表示连接对象.记录集对象和命令对象. 三个对象对应的智能指针分别是:_ConnectionPtr ...