是否可以通过 res.render 或 app.render (不是路由)自动编译手写笔?

Is it possible to have stylus compile automatically via res.render or app.render (not a route)?

很像 stylus 中间件在触发路由时自动编译模板(在我的例子中是 jade)所需的 css 的方式,有没有办法在路由之外自动编译-> 中间件流程?

我有一个构建系统,我通过 app.render 呈现一些 html 文件,然后将它们保存到文件系统(很多人对电子邮件模板做类似的事情)。我想确保当我 app.render("foo.jade", func... 时,foo.jade 所需的任何 .css 文件都是从它们的 styl 副本自动编译的。如果我有一条呈现 foo.jade 的路线,这种情况会完美而自动地发生,但在这种情况下,没有路线。我知道我可以使用 stylus' api 并调用 stylus.render,但这意味着我必须指定并呈现我的模板所需的每个 styl/css 文件"by hand."

I want to make sure that when I app.render("foo.jade", func..., that any of the .css files needed by foo.jade are automatically compiled from their styl counterparts

如果您想提前这样做,例如在呈现 foo.jade 时而不是在请求 GET /foo.css 时,不,几乎可以肯定没有任何东西可以解析您 HTML 在通往文件系统的路上并动态呈现所有引用的 CSS。至少不完全符合您的规格。但是,确实存在 tools 来读取 HTML 文件并将其内联引用 CSS,因此您可以通过这些 运行 您的 HTML。

您可能想查看 juice,但由于它面向电子邮件并将 CSS 内联到 HTML 本身,因此它可能无法满足您的要求(这可能会生成.css 文件在 HTML).

旁边

我的建议是自己解析链接 CSS URL 的 HTML 并将相应的手写笔适当地渲染到磁盘。使用一致的模式,您应该能够使用一个或几个函数处理所有模板。

但是,如果您想在收到 GET /foo.css 请求时将手写笔即时渲染到 CSS,请确保现有的中间件可以做到这一点,或者您可以使用自己的中间件。不,你不需要为每条 CSS 路径设置路由,只需要一些 URL patterns/params 和良好的旧编程。