如何在目标目录路径中使用YAML前端内容?

时间:2013-09-17 22:00:38

标签: javascript gruntjs permalinks templating assemble

我希望博文的路径使用花哨的日期格式,例如/ blog / 2013/09/17所以我旧的octopress博客的链接没有被破坏。

在每个降价页面的YAML前端内容中,我添加了日期。

---
date: 2013-09-13
---

所以在Gruntfile.js中我想做这样的事情:

dest: './blog/<%= date.getFullYear() %>/<%= date.getMonth() %>/<%= date.getDate() %>'

虽然无法找到从YFM获取该日期属性的方法。这是可能的,这是实现我想要的正确方法吗?

1 个答案:

答案 0 :(得分:1)

编辑:由于此答案最初发布,因此发布了永久链接插件,这使得这非常简单:https://github.com/assemble/assemble-contrib-permalinks


我认为更好的方法是在http://github.com/assemble/assemble/issues创建一个功能请求,但是,如果您希望在gruntfile中找到一种在lodash模板中使用自定义逻辑的方法,那么我的建议是创建mixins然后可以在您的模板中使用。

要添加mixins,只需在initConfig对象之外执行此类操作(还有其他方法,但这是最简单的方法):

module.exports = function (grunt) {

  grunt.util._.mixin({
    year: function(foo) {
      return date.getFullYear(foo);
    },
    month: function(foo) {
      return date.getMonth(foo);
    },
    day: function(foo) {
      return date.getDay(foo);
    }
  });

  grunt.initConfig({
    foo: {
      src: 'path/to/my/files/**`
      // Now we can use the mixins like this:
      dest: <%= _.year() %>/<%= _.month() %>/<%= _.day() %>'
  });
  grunt.registerTask(...);
};

使用此方法的挑战是从src文件的YAML前端获取上下文,然后返回要在dest路径中使用的日期。或者,这不应该难以实现作为组装中的本机特征,我认为其他人也将从中受益。