Шаблон Jade в качестве препроцессора для html

Я не буду использовать node.js в производстве, но мне нравится jade, поэтому я хотел бы скомпилировать jade шаблон html при разработке.

С учетом этой файловой структуры:

app/
  jade_templates /
    index.jade
    subfolder /
      subpage.jade
  html_templates /
    index.html
    subfolder /
      subpage.html

Я хотел бы иметь script, который смотрит каталог jade_templates и компилирует соответствующий html-шаблон в html_templates в любое время, когда было сделано изменение.

Как это можно сделать?

Спасибо.

ИЗМЕНИТЬ В Jade README есть этот образец Makefile, но я не уверен, как его адаптировать к моим потребностям.

JADE = $(shell find pages/*.jade)
HTML = $(JADE:.jade=.html)

all: $(HTML)

%.html: %.jade
    jade < $< --path $< > [email protected]

clean:
    rm -f $(HTML)

.PHONY: clean

Ответ 1

Поскольку у меня была потребность в аналогичном script, я потратил время и попробовал несколько инструментов и сценариев оболочки там (например, forever), но не смог найти ничего удовлетворительного.

Итак, я продолжил реализацию этого решения. Вы можете найти его на github:

https://github.com/mihaifm/simplemon

Посмотрите, работает ли это для вас. Я добавил пример и для нефрита.

Ура!

Ответ 2

Я использую Grunt для этого. Используя grunt-contrib-jade и grunt-contrib-watch, вы можете довольно легко настроить задачу поиска, чтобы посмотреть каталог для нефритовых файлов и скомпилировать их в другой каталог, когда они меняются.

У Grunt есть немного кривой обучения, но она очень удобна и позволяет мне разумно развиваться в Jade (и Sass и Coffeescript!) всякий раз, когда я хочу - если вы вообще заинтересованы в этом подходе, оставляйте комментарий и Я добавлю образец Gruntfile, который сделает то, что вы хотите.

Ответ 3

Я предлагаю вам написать небольшое приложение node, чтобы сделать это.

Код будет выглядеть так:

// Watch a directory for files changes (such as here: https://github.com/Raynos/fyp/blob/master/src/build.js)
// Get the Jade code from the changed file
// Compile it
// Writes the output to a file with the same name in another directory

Я сказал "node приложение", но это должно быть то, с чем вам удобно.

Ответ 4

Вы можете использовать entr, который выполняет программу, если один из указанных файлов изменился:

find -name '*.jade' | entr make