Есть ли способ заставить Stylus использовать пути src и dest, которые не содержат каталог таблиц стилей?

Недавно я начал использовать Node и Stylus и столкнулся с этой проблемой. Я хочу сохранить сгенерированный css в /public/css, а не в /public/stylesheets, и кажется, что параметры конфигурации Stylus не позволяют этого.

// ... your middleware here
app.use(stylus.middleware({
    src: __dirname + '/views',     // .styl files are located in `views/stylesheets`      
    dest: __dirname + '/public',   // .styl resources are compiled `/stylesheets/*.css`     
    compile: function(str, path) {
        return stylus(str)
            .set('filename', path)
            .set('warn', true)
            .set('compress', true);
    }
}));

Комментарии в приведенном выше коде взяты из примера Stylus. Для свойств src и dest автоматически добавляется «/stylesheets» (как следует из комментариев к исходному примеру). Это кажется ненужным, и я думаю, мне интересно, есть ли способ отключить это.


person cilphex    schedule 10.02.2012    source источник


Ответы (3)


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

Предполагая, что ваш путь HTTP-запроса /css/file.css, ваша структура каталогов должна выглядеть так:

/view/stylesheets/css/*.styl
/public/css/*.css

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

debug: true,   // Set this flag to see what the middleware is doing
src: __dirname + '/views/stylesheets',
dest: __dirname + '/public',

(Я не пробовал это, но смысл в том, чтобы соответствовать ожиданиям промежуточного программного обеспечения.)

person thatmarvin    schedule 20.03.2012

Ты пытался:

  src: __dirname + '/views/stylesheets',
  dest: __dirname + '/public/css',  

Глядя на код: https://github.com/LearnBoost/stylus/blob/master/lib/middleware.js

Это должно работать, поскольку относительный путь к файлу стилуса (к каталогу src) больше не содержит таблиц стилей. Само по себе ничего не добавляется.

person Mâtt Frëëman    schedule 10.02.2012
comment
Это не работает для меня. Я проверил эти настройки: src: __dirname + '/views', dest: __dirname + '/public', и он вытащил из /views/stylesheets и сгенерировал в /public/stylesheets. Так что этот путь каким-то образом добавляется. Это ничего не делает, когда я меняю dest на __dirname + '/public/css' и устанавливаю свой css include на /css/main.css. - person cilphex; 10.02.2012
comment
Другими словами, относительный путь был [исходный_каталог]/stylesheets/main.styl, и он выводился в [destdir]/stylesheets/main.css, как и ожидалось. - person Mâtt Frëëman; 10.02.2012

Я столкнулся с такой же проблемой, как это. Я использовал src как функцию.. например: ваш путь http-запроса

GET /css/style.css

затем замените /css и перейдите в папку stylesheets.

app.use(stylus.middleware({
   src: function( path ){
       // print it for debug
       console.log( path );
       return  require('path').join(
           __dirname + '/views/stylesheets',
           path.replace('/css' ,'').replace('.css', '.styl')
       );
   },
   dest:__dirname + '/public' ,
   debug: true,
   ...

он будет генерировать файлы css в папке __dirname + '/public/css/

или

создайте папку css под __dirname + '/views/stylesheets' и переместите в нее *.styl файлов

app.use(stylus.middleware({
   src: __dirname + '/views/stylesheets',
   dest:__dirname + '/public' ,
   debug: true,
   ...       
person rab    schedule 03.02.2014