Настройка автокомпиляции для Stylus

Я установил node.js/stylus/nib на свой Mac и могу вручную скомпилировать файл .styl в .css в командной строке. Я также знаю, что есть эти stylus.middleware() вещи, которые продолжают возникать, когда я ищу, как настроить автокомпиляцию при изменении .styl, однако я понятия не имею, как я должен это реализовать (я никогда раньше не использовал node.js).

В какой файл мне поместить этот код?

Как мне запустить этот код, чтобы он всегда запускался?

Я думаю, что мне не хватает нескольких вещей на стороне узла, чтобы настроить это.


person ryanzec    schedule 12.06.2012    source источник


Ответы (6)


Из командной строки вы можете использовать:

stylus -w folder/

или просто для другого примера:

stylus -w styl/*.styl -o css/

Он будет следить за изменениями и компилировать все файлы *.styl, находящиеся в этой папке.

person k3liutZu    schedule 09.11.2012
comment
Вы также можете перечислить более одной папки из того, что я могу сказать, тестируя ее. - person Costa Michailidis; 27.12.2016

Если вы установили stylus как глобальный пакет (npm install stylus -g), у вас в системе есть двоичный файл стилуса.

$ stylus -h
  Usage: stylus [options] [command] [< in [> out]]
                [file|dir ...]

  Commands:

    help [<type>:]<prop> Opens help info at MDC for <prop> in
                         your default browser. Optionally
                         searches other resources of <type>:
                         safari opera w3c ms caniuse quirksmode

  Options:

    -i, --interactive       Start interactive REPL
    -u, --use <path>        Utilize the stylus plugin at <path>
    -U, --inline            Utilize image inlining via data uri support
    -w, --watch             Watch file(s) for changes and re-compile
    -o, --out <dir>         Output to <dir> when passing files
    -C, --css <src> [dest]  Convert css input to stylus
    -I, --include <path>    Add <path> to lookup paths
    -c, --compress          Compress css output
    -d, --compare           Display input along with output
    -f, --firebug           Emits debug infos in the generated css that
                            can be used by the FireStylus Firebug plugin
    -l, --line-numbers      Emits comments in the generated css
                            indicating the corresponding stylus line
    --include-css           Include regular css on @import
    -V, --version           Display the version of stylus
    -h, --help              Display help information
person TheHippo    schedule 12.06.2012
comment
к сожалению, поскольку -w не поддерживает рекурсивное наблюдение, это возможно только для меня (и на основе комментариев, сделанных здесь: github.com/LearnBoost/stylus/pull/227 : этого не произойдет) - person ryanzec; 12.06.2012
comment
конечно, мне кажется, что тикет был решен и закрыт 5 месяцев назад. Если нет, вы можете объединить запрос на включение в свою собственную версию стилуса. - person TheHippo; 12.06.2012

Здесь кратко рассматриваются некоторые основы Node.

<сильный>0. Организация кода. По соглашению код основного приложения Node помещается в файл с именем app.js в корне проекта.

Внутри app.js вещи сгруппированы в две основные части:

  1. синхронные инициализации: требуют модулей, создают каталоги, читают конфигурации, подключения к БД и т. д. Вещи, которые блокируют, поэтому они должны существовать или быстро исчезнуть.
  2. асинхронные задачи приложения: запуск сервера, фоновые процессы, автоматическая компиляция CSS и JS, маршрутизация, ввод-вывод и т. д. Вещи, которые находятся в цикле событий.

<сильный>1. Скомпилируйте Stylus в CSS при сборке приложения. Нам потребуется стилус. модуль. Обычно это делается в верхней части app.js, чтобы хранить зависимости вместе.

var stylus = require('stylus');

При первом запуске Node app.js вам понадобится этот JS-модуль для создания CSS. Это основная идея:

stylus.render(stylus-code-string, function(err, css) {
  if (err) throw err;
  console.log(css);
});

Вот официальный Stylus Javascript API.

Чтобы использовать возможности Node, вы должны прочитать файл стилуса с помощью модуля fs в буфер, затем преобразуйте его в строку и, наконец, передайте в stylus.render(). Затем отправьте результат в файл назначения. Поскольку это часть процесса сборки, он может быть синхронным. Но это не совсем ваш вопрос...

<сильный>2. Автоматическая компиляция CSS с помощью Stylus в фоновом режиме.

Эта функция порождает child_process, который отслеживает один .styl файл и компилирует включенные .styl файлы в .css файл. Вам не нужен модуль для этого, только установите исполняемый файл стилуса, чтобы он работал в командной строке. (Вы уже сделали это). Этот пример был сделан с помощью стилуса версии 0.5.0. Кроме того, пути к папкам, которые вы используете (например, build/styles и styles), должны существовать.

function watchStyles(sourcefile, destinationfolder) {
  var Stylus = child_process.spawn('stylus', ['--sourcemap', '-w', sourcefile, '--out', destinationfolder]);

  Stylus.stdout.pipe(process.stdout); // notifications: watching, compiled, generated.
  Stylus.stderr.pipe(process.stdout); // warnings: ParseError.

  Stylus.on('error', function(err) {
    console.log("Stylus process("+Stylus.pid+") error: "+err);
    console.log(err);
  });

  // Report unclean exit.
  Stylus.on('close', function (code) {
    if (code !== 0) {
      console.log("Stylus process("+Stylus.pid+") exited with code " + code);
    }
  });
}

Затем вам нужно вызвать эту функцию через некоторое время после запуска вашего приложения. Передайте свой основной файл .styl в качестве источника. Затем каталог назначения, в который вы хотите отправить свой CSS.

// check that you passed '-w' parameter
if (process.argv[2] && (process.argv[2] == "-w")) {
  watchStyles('styles/app.styl', 'build/styles');
}

Запустите приложение, выполнив: $ node app.js -w

Это помогает организовать ваши .styl файлы под одним app.styl, чтобы содержимое вашего app.styl выглядело так:

@import 'layout'
@import 'header'
@import 'main'
@import 'footer'
@import 'modal'
@import 'overrides'
person Benxamin    schedule 26.02.2015

** Вчера я оказался здесь и не нашел правильного ответа. Так что это продолжение для всех, кто идет тем же путем, что и я... **

У меня тоже была проблема с настройкой командной строки стилуса. Я пытался установить stylus глобально
$ npm install -g stylus
и получал ошибки. У меня это работало в одном проекте с grunt-contrib-stylus, но через командную строку я ничего не заработал.
Даже $stylus --version ничего не вернуло. Я попытался обновить npm, но это сломало npm, поэтому я переустановил node, чтобы переустановить npm. Затем я смог выполнить новую установку $ sudo npm install -g stylus и смог получить --version.
Мне также пришлось переустановить grunt и все остальное, что я установил глобально через npm...

person Jason Lydon    schedule 29.01.2014

Во-первых, установите стилус локально npm install stylus --save-dev, если вы еще этого не сделали.

Создайте сценарий запуска, который создает вашу таблицу стилей и перестраивает ее всякий раз, когда обнаруживается изменение в вашем основном файле стилуса:

startup.js

var fs = require('fs')
var stylus = require('stylus')

// Define input filename and output filename
var styleInput = __dirname + '/dev/stylus/main.styl'
var styleOutputFilename = 'main.css'
var styleOutput = __dirname + '/static/' + styleOutputFilename
var stylusPaths = [__dirname + '/dev/stylus', __dirname + '/dev/stylus/libs']

// Build stylesheet on first execute
buildStyles(styleInput, styleOutput, stylusPaths)

// Watch stylus file for changes.
fs.watch(styleInput, function(eventType, filename) {
  if (filename) {
    buildStyles(styleInput, styleOutput, stylusPaths)
  } else {
    console.log('no filename found. probably platform doesnt support it.');
  }
});

function buildStyles(input, output, paths) {
  stylus(fs.readFileSync(input, 'utf-8'))
    .set('paths', paths)
    .set('include css', true)
    .set('watch', true)
    .render(function(err, css) {
      if (err) throw err;

      fs.writeFile(output, css, (err) => {
        if (err) throw err;

        console.log('???? Stylesheet built successfully.');
      });
  });
}

Введите node startup.js в терминале. Вы увидите сообщение «Таблица стилей успешно создана». всякий раз, когда вы меняете свой основной файл стилуса.

На их веб-сайте есть хорошая документация по API-интерфейсу стилуса javascript.

person muratgozel    schedule 04.02.2017

ОК, я отредактировал свой ответ, потому что вы не хотите делать домашнюю страницу, а затем подключать активы не имеет смысла и не может вам помочь ... но, может быть, это...

http://thechangelog.com/post/3036532096/stylus-expressive-робаст-функция-богатый-css-язык

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

HTH и извините за недоразумение...

person silverfighter    schedule 12.06.2012
comment
Хорошо, та часть, где написано Затем добавьте эту строку в конфигурацию вашего приложения, какая конфигурация приложения. Единственное, для чего мне нужен node.js, это компилировать файл стилуса. На самом деле моему веб-приложению не нужен node.js, и я не хочу включать node.js для своего веб-приложения. - person ryanzec; 12.06.2012