【问题标题】:Changed LESS-files not automatically recompiling in node/express/coffee setup更改的 LESS 文件不会在 node/express/coffee 设置中自动重新编译
【发布时间】:2012-05-30 16:02:34
【问题描述】:

在最终将 LESS 编译到一个 Node.js 应用程序中并在咖啡上运行 express 之后,我遇到了一个问题,我似乎没有想法了:

对 LESS 文件的更改不会调用 express 调用的 LESS 编译器的重新渲染。

在我的主 app.coffee 文件中,可以找到(按此顺序)

app.use exp.compiler { src: __dirname + '/public', dest: __dirname + '/public', enable: ['less'] }
app.use exp.methodOverride()
app.use exp.bodyParser()
app.use exp.cookieParser()
app.use exp.static __dirname + '/public'

之后,添加会话和中间件。

请求时未将 .less 文件重新编译为 .css 的问题在应用重启后仍然存在。

我尝试交换 exp.compilerexp.static 行,但除了第一个客户端请求发生的情况(简而言之,css 文件已呈现但未交付)之外,没有任何改变。

删除 .css 文件显然会使代码将 .less 重新编译为 .css,但这不是我想象的编译器那样。还有什么我可以做的吗?

【问题讨论】:

  • 我会建议你使用命令行lessc 程序,但它似乎也没有手表模式。
  • 大胆猜测,但请尝试检查您的文件权限并将编译器行放在express.static之前
  • 这对重新编译也没有影响。我想我可能会写一个解决方法,在启动主应用程序文件之前删除所有 css 文件。但这看起来更像是一个 hack,而不是一个解决方案。

标签: node.js coffeescript express less


【解决方案1】:
// Environment Respective Less Watch Script
if (app.settings.env === 'development') {
  var stylesheets = fs.readdirSync(path.join(__dirname, 'views', 'stylesheets')).filter(function(f) {
    return f.match(/\.less$/);
  });
  stylesheets.forEach(function(f) {
    fs.watchFile(path.join(__dirname, 'views', 'stylesheets', '/' + f), function(c, p) {
      if (c.mtime.getTime() !== p.mtime.getTime()) {
        // Remove the existing CSS file
        fs.unlinkSync(path.join(__dirname, 'public', 'stylesheets', 'bootstrap.css'));
        console.log(' Successfully removed existing stylesheet for recompiling');
      }
    });
  });
}

【讨论】:

    【解决方案2】:

    研究表明,目前没有-watch-flag 与 express 或 lessc 中的编译器一起使用。因此,只有在事先手动删除 css-Files 时,在 express 中重新编译才有效。

    【讨论】:

    • 您应该输入用于 node、express 和 less 的版本。我可以通过以下版本观看我的 .less 文件:“express”:">= 2.5.9 =1.1.3 =1.3.0
    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 2013-03-06
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多