使用Node.js和Express进行Twitter Bootstrap LESS

Pat*_*ick 23 less node.js express twitter-bootstrap

由于Twitter Bootstrap 2已经发布,我想将它集成到我的Node.js项目中.不幸的是,编译器越少越好,我无法使其工作.我将所有文件放入公共文件夹并设置了一个新项目express -c less newproj.并添加了较少的行

less = require('less');
app.use(express.compiler({ src: __dirname + '/public', enable: ['less'] }));
Run Code Online (Sandbox Code Playgroud)

所有节点告诉我的是:

Express server listening on port 3000 in development mode
undefined
Run Code Online (Sandbox Code Playgroud)

在客户端,我得到bootstrap.css文件的500(内部服务器错误),该文件应由lessc编译.

lessc bootstrap.less
Run Code Online (Sandbox Code Playgroud)

工作良好.

有谁知道如何解决这个问题?

Gol*_*Boy 19

对于后人来说,这在最近的Express中发生了很大变化:

app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));

// This is just boilerplate you should already have
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,那些静态中间件也需要先于`app.use(app.router);` - 重要!:-) (3认同)

Chr*_*nty 11

好的,这是我找到的.首先,您需要编译器和静态中间件.编译器编译你的less并重新编译更改,静态中间件执行css的实际服务

app.use(express.compiler({ src : __dirname + '/public', enable: ['less']}));  
app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)

其次,由于某些原因,当编译器运行时,它会丢失当前路径信息,因此无法找到包含.所以我必须通过bootstrap.css并添加每个导入的路径.

@import "/public/stylesheets/reset.less";
Run Code Online (Sandbox Code Playgroud)

这显然很奇怪,我将进一步深入研究.

编辑:奇怪的是,通过代码深入了解我并没有简单的方法.更多的搜索在连接repo https://github.com/senchalabs/connect/pull/174上找到了这个拉取请求,它提供了一个修复,但开发人员似乎并不想要它.

该线程中也有一些解决方法,但最好的想法是绝对路径包含.