Harp.js和GitHub页面是否有任何文件夹结构的最佳实践?

Gol*_*den 3 javascript github node.js github-pages harp

我正在使用Harp创建一个静态网站,该网站将托管在GitHub页面上.到目前为止,一切正常,但我有点担心文件夹结构.

这是因为GitHub页面需要在存储库的根文件夹中传递的文件.

所以我最终得到了当前的结构:

/
  .gitignore
  index.html
  _sources/
    harp.json
    README.md
    public/
      index.ejs
Run Code Online (Sandbox Code Playgroud)

困扰我的是我无法将README.md文件放在顶层(这意味着当我在GitHub上访问存储库时,我总是被告知我应该创建一个,并且我需要手动降低一个级别),如果我不希望README.md也通过GitHub页面公开.

此外,构建步骤感觉很奇怪.从_sources我需要运行的文件夹中:

$ harp compile --output ..
Run Code Online (Sandbox Code Playgroud)

这在某种程度上感觉不对,编译东西并将结果放在父文件夹中.这是一个理论上的问题,但如果_sources文件夹中有一个文件public夹,我最终会得到一个很大的泥球: - /

有没有办法如何构建这个,以便我可以将_sources文件夹中的所有内容放在顶层,同时仍然可以提供所有内容,因为它现在来自GitHub页面?

Har*_*ood 5

我用奇妙的gh-pages npm模块找到了一个很好的解决方案.这是我的设置:

相关目录/文件:

README.md
bin/
    publish
dist/
node_modules/
package.json
src/
    _layout.jade
    index.md
Run Code Online (Sandbox Code Playgroud)

相关行package.json:

"scripts": {
  "compile": "harp compile src dist",
  "publish": "npm run compile && bin/publish"
},
"devDependencies": {
  "coffee-script": "^1.9.2",
  "gh-pages": "^0.2.0",
  "harp": "^0.13.0"
},
Run Code Online (Sandbox Code Playgroud)

内容bin/publish(这是CoffeeScript的,但你可以很容易地将其转换为JS):

#!/usr/bin/env coffee

ghpages = require 'gh-pages'
path = require 'path'

handle_error = (error) ->
  if error
    console.error error
    process.exit error.code or 1

dist = path.join __dirname, '..', 'dist'

ghpages.publish dist, handle_error
Run Code Online (Sandbox Code Playgroud)

要发布,我只需运行:

npm run publish

它创建了gh-pages分支,其中distdir 的内容作为repo的根目录,并将其推送到github!

更详细的,从gh-pages文档:

调用此函数将创建当前存储库的临时克隆,创建一个gh-pages分支(如果尚不存在),从基本路径复制所有文件,或仅匹配来自可选src配置的模式,提交所有更改并推送到origin遥控器.

这对我来说就像一个魅力.希望它能帮到别人!

对于完整的工作示例,这里是一个使用上述所有配置(以及更多)的实时示例仓库.