4

我最近开始使用 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”(正如原始示例中的注释所暗示的那样)。这似乎没有必要,我想我想知道是否有办法将其关闭。

4

3 回答 3

1

根据我从 pull request #128收集到的信息,目前这是不可能的。解决方法是嵌套一个额外的目录来匹配中间件生成的路径,这看起来比问题本身更难看。

假设您的 HTTP 请求路径是/css/file.css,您的 dir 结构应如下所示:

/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',

(我还没有尝试过,但关键是要匹配中间件的期望。)

于 2012-03-20T15:56:10.847 回答
0

我也遇到过这样的问题。我用作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,
   ...       
于 2014-02-03T13:05:23.950 回答
0

你有没有尝试过:

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

看代码: https ://github.com/LearnBoost/stylus/blob/master/lib/middleware.js

这应该可以工作,因为手写笔文件的相对路径(到 src 目录)不再包含样式表。本身没有附加任何内容。

于 2012-02-10T05:10:16.400 回答