Express.js + Less: как правильно настроить

Я пробовал модули «меньше» и «меньше промежуточного программного обеспечения». Я перепробовал все различные фрагменты кода, которые нашел во всех руководствах. Нет доступной документации. Может кто-нибудь объяснить, как настроить Express.js и Less, чтобы меньше было предварительно скомпилировано правильно ?!

Используйте следующие вопросы в качестве ориентира:

  1. Будете ли вы использовать модуль less или модуль less-middleware? Какой официальный / поддерживаемый способ? Что лучше?
  2. Как должна выглядеть ваша структура каталогов в /public? (какие-то конкретные папки вам нужны? 'styles' / 'less' / 'css'? или это зависит от вас?)
  3. Как настроить экспресс-приложение в соответствии со структурой каталогов (из вопроса 2). (статические файлы и параметры компилятора или менее связующее ПО, какие каталоги здесь важны)
  4. Как ссылаться на мою предварительно скомпилированную таблицу стилей из html? (с .less или .css? Какой тип ссылки? Какой путь к каталогу?)

Было бы так хорошо, если бы кто-нибудь мог на это ответить :-)


person Sven    schedule 08.06.2012    source источник
comment
Я бы посоветовал использовать grunt для предварительной компиляции меньшего количества файлов, а затем пусть node.js будет обслуживать этот контент.   -  person Matej    schedule 25.06.2014


Ответы (3)


Это решение работает только для Express 2.x.

Я нашел решение, надеюсь, это кому-то поможет:


1. меньше или меньше промежуточного программного обеспечения

Я использую меньше, потому что прочитал, что это официальный порт. Но не уверен, в чем разница, поскольку документации нет.

2. структура каталогов:

Ваша структура каталогов не имеет значения. Но настоятельно рекомендуется иметь общую папку, которая обслуживает все статическое содержимое, такое как файлы JavaScript,, Less, CSS или изображения.

3. Конфигурация приложения:

Чтобы меньше работало должным образом, вам нужны две особые вещи:

Во-первых, компилятор, который компилирует файлы less:

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

А во-вторых, покажите, где найти статические файлы!

    app.use(express.static(__dirname + '/public'));

Оба должны указывать на вашу общую папку!

4. HTML

    <link rel="stylesheet" href="/styles/bootstrap.css">

Укажите прямо на ваш файл без root, который находится где-то в вашей общей папке.

5. Меньше файлов

Благодаря этому ответу я все время знаю, что пошло не так. В less.js. есть своего рода ошибка. Он не найдет все меньше файлов, которые вы импортируете, в корневом файле. Итак, вы должны добавлять правильный путь к каждому импорту !!!

Заменяйте @import "reset.less"; на @import "/public/styles/reset.less"; для каждого импорта!

et voilà ... :-)


Спасибо всем, кто помогал с этой проблемой. Также посмотрите ответ Уэса Джонсона. Я думаю, у него есть очень хорошее решение, которое как-то не сработало для меня ...

person Sven    schedule 12.06.2012
comment
express.compiler больше не существует в экспрессе 3 - person bendytree; 18.04.2013

За этот ответ (над которым я тоже работал). Сначала настройте свой app.js,

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);

Затем просто включите ссылку на файл less, но измените расширение на css. Нравится,

<link rel="stylesheet" href="components/bootstrap/less/bootstrap.css" />

И это скомпилирует components/bootstrap/less/bootstrap.less в css и предоставит его вашему клиенту.

См. документацию на less-middleware для получения дополнительной информации о том, как делать такие крутые вещи, как автоматическое уменьшение.

person Evan Carroll    schedule 19.04.2013
comment
выполняет меньше предварительной компиляции или компиляции промежуточного программного обеспечения при каждом запросе. Есть ли способ это настроить. Потому что в процессе разработки я хотел бы, чтобы он компилировался по запросу, поэтому мне не нужно было перезапускать сервер. Но в производстве я бы хотел, чтобы он скомпилировался один раз, а затем сохранил его в кеше или что-то в этом роде. Спасибо - person Muhammad Umer; 29.01.2015
comment
я использовал задачу grunt для компиляции меньше в css вручную .. -_- - person Muhammad Umer; 29.01.2015
comment
@MuhammadUmer внутренне менее связующее ПО использует кеш, и если вы укажете cacheFile, кеш будет сохраняться между перезапусками сервера. Еще больше радости. - person Evan Carroll; 30.01.2015
comment
обновляется ли постоянный кеш, если было изменено меньше файлов, если я укажу cacheFile. - person Muhammad Umer; 30.01.2015

Я никогда не использовал меньшее количество промежуточного программного обеспечения, но я не уверен, насколько это актуально для большинства приложений. Большинству, вероятно, следует просто скомпилировать заранее, то есть: когда вы запускаете Node. Может быть так просто:

var fs      = require('fs'),
    less    = require('less');

fs.readFile('styles.less', function(err,styles) {
    if(err) return console.error('Could not open file: %s',err);
    less.render(styles.toString(), function(er,css) {
        if(er) return console.error(er);
        fs.writeFile('styles.css', css, function(e) {
            if(e) return console.error(e);
            console.log('Compiled CSS');
        });
    });
});

Структура каталогов полностью зависит от ваших предпочтений. Я бы использовал express.static для обслуживания скомпилированного файла CSS.

person Wes Johnson    schedule 08.06.2012
comment
Я получаю сообщение об ошибке из-за меньшего класса парсера -.- странно. Хотелось бы иметь документацию :-( - person Sven; 11.06.2012
comment
нет, он просто не отображает - person Sven; 11.06.2012
comment
В вашем документе LESS может быть ошибка. Приведенный выше код отлично подходит для меня. Проверено на Less версии 1.3. - person Wes Johnson; 11.06.2012
comment
Только что видел ваше обновление ... Я бы посоветовал не использовать промежуточное ПО по причине, которую я привожу в своем ответе. Вы не указываете параметр кеширования, поэтому я предполагаю, что он перекомпилирует таблицу стилей каждый раз, когда она отображается ... не очень эффективно. Этот ответ компилируется один раз, и вы повторно используете обработанный CSS с последующими запросами. - person Wes Johnson; 11.06.2012
comment
Теперь я получаю эту ошибку: D: \ dev \ node-backend \ Prototyp_Backend \ node_modules \ less \ lib \ less \ parser.js: 390 else throw new (LessEr ^ [object Object] - person Sven; 12.06.2012