带有汇编的生成页面的路径

时间:2013-11-21 11:43:15

标签: gruntjs assemble grunt-assemble

我正在努力应对grunt-assemble grunt任务配置,如下所示:

assemble: {
  options: {
    flatten: false,
    expand: true,

    assets: '',

    layout: 'default.hbs',
    layoutdir: 'templates/layouts',

    partials: ['templates/includes/*.hbs'],
    helpers: ['templates/helpers/*.js'],
    data: ['templates/data/*.{json,yml}']
  },

  dev: {
    src: 'templates/pages/**/*.hbs',
    dest: 'build/'
  }

assemble.io的项目模板的脚手架如下所示:

templates
├── helpers
├── includes
│   ├── page-footer.hbs
│   ├── page-header.hbs
│   └── scripts.hbs
├── layouts
│   └── default.hbs
└── pages
    ├── en
    │   └── index.hbs
    ├── fr
    │   └── index.hbs
    └── index.hbs

我希望得到类似的东西:

build
├── en
│   └── index.html
├── fr
│   └── index.html
└── index.html

但我得到类似的东西:

build
└── templates
    └── pages
        ├── en
        │   └── index.html
        ├── fr
        │   └── index.html
        └── index.html

我确实尝试了一些(实际上很多)组合(使用flattenexpand以及cwd选项)但我被卡住了。

使用flatten会导致index.html文件覆盖彼此。

所以我实际上将渲染转换为 .tmp 目录,然后将文件移动到 build 目录。 我不喜欢这个解决方案,因为那时page.assets仍然已经(对于root index.html,它的值将是../../..

2 个答案:

答案 0 :(得分:8)

<强>咕噜组装

(请注意,此信息特指grunt-assemble 0.4.x,这是用于汇编的grunt插件,但具有完全不同的API)

@doowb几乎是正确的,尝试将expand: trueext: '.html'添加到文件配置中:

assemble: {
  options: {
    flatten: false,
    expand: true,

    assets: '',

    layout: 'default.hbs',
    layoutdir: 'templates/layouts',

    partials: ['templates/includes/*.hbs'],
    helpers: ['templates/helpers/*.js'],
    data: ['templates/data/*.{json,yml}']
  },

  dev: {
    files: [
      {expand: true, cwd: 'templates/pages/', src: '**/*.hbs', dest: 'build/', ext: '.html'}
    ]
  }
}

另请查看https://github.com/assemble/assemble-contrib-permalinks

汇编0.7.x

集合是0.7.0中的第一类集合,插件也是如此,因此生成相对链接,构建分页和创建自定义永久链接等操作要容易得多。

如果你正在使用assembly 0.7.x及更高版本,assemble-permalinks是你想要使用的插件。

答案 1 :(得分:2)

您是否尝试将展开的files对象用于具有cwd属性的grunt目标?

assemble: {
  options: {
    flatten: false,
    expand: true,

    assets: '',

    layout: 'default.hbs',
    layoutdir: 'templates/layouts',

    partials: ['templates/includes/*.hbs'],
    helpers: ['templates/helpers/*.js'],
    data: ['templates/data/*.{json,yml}']
  },

  dev: {
    files: [
      { cwd: 'templates/pages/', src: '**/*.hbs', dest: 'build/' }
    ]
  }
}