2012-02-07 42 views
22

Dado que Twitter Bootstrap 2 está fuera, quería integrar eso en mi proyecto Node.js. Desafortunadamente, hay algo mal con menos compilador y no puedo hacer que funcione. Puse todos los archivos en la carpeta pública y configuré un nuevo proyecto con express -c less newproj. y añaden las líneas por menosTwitter Bootstrap LESS con Node.js y Express

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

Todo Nodo me dice es:

Express server listening on port 3000 in development mode 
undefined 

En el lado del cliente consigo un (Internal Server Error) 500 para el archivo bootstrap.css, que debe ser compilado por menosc.

lessc bootstrap.less 

Funciona bien.

¿Alguien sabe cómo resolver el problema?

+0

Lo otro middleware ¿Tiene en funcionamiento? ¿estático? ¿Sabes lo que es iniciar sesión indefinido a la consola? –

+0

Nada más. Es un proyecto completamente nuevo y solo cambié esas dos líneas y el archivo layout.jade. No hay ninguna pista de dónde viene lo "indefinido". – Patrick

Respuesta

19

Para la posteridad, esto ha cambiado mucho en los últimos 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); 
+0

¿En qué versión está esto? –

+0

bien, he instalado menos middleware. mi archivo menos (styles.less) está en /public/stylesheets/styles.less --- ¿cómo obtengo styles.css? –

+0

@barraponto use href = '/ stylesheets/styles.css' y el css se genera automáticamente – tofutim

11

Ok, esto es lo que he encontrado para ti. Primero necesita tanto el compilador como el middleware estático. El compilador compila el menos y vuelve a compilar en los cambios, el middleware estática hace el servicio real de la CSS

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

En segundo lugar, por alguna razón, cuando se ejecuta el compilador que está perdiendo la información de la ruta actual, por lo que no puede encontrar el incluye. Así que tuve que ir a bootstrap.css y agregar la ruta a cada importación.

@import "/public/stylesheets/reset.less"; 

Esto es claramente extraño, voy a profundizar más en él.

Editar: Aunque es extraño, una mirada profunda a través del código me muestra que no hay una forma sencilla de evitarlo. Un poco más de búsqueda encontró esta solicitud de extracción en el repo de conexión https://github.com/senchalabs/connect/pull/174 que ofrece una solución para esto, pero los desarrolladores no parecen quererlo.

También hay algunas soluciones en ese hilo, pero parece que la mejor idea es la ruta absoluta que incluye.

+0

Consulte la solución de @ GoldenBoy para obtener una actualización sobre esto. Deberías usar menos middleware. – tofutim