KOA 2-使用node-sass-middleware将SASS编译为CSS

时间:2018-11-15 08:00:05

标签: node.js sass koa2

我正在尝试使用koa2获得node-sass-middleware。有一个koa-sass模块可以正常工作,但它使用的是生成器。

module.exports = function (options) {
  var mw = require('node-sass-middleware')(options);
  return function *(next) {
    yield mw.bind(mw, this.req, this.res);
    yield next;
  };
};
  

koa已弃用在v3中将删除对发电机的支持。请参阅文档,以获取有关如何转换旧的中间件https://github.com/koajs/koa/blob/master/docs/migration.md

的示例。

所以我想使用async / await进行转换

这是我的代码:

module.exports = (options) => {
  const sass = require('node-sass-middleware')(options);;

  const middleware = async (ctx, next) => {
    await sass.bind(sass, ctx.req, ctx.res);
    await next();
  }
  return middleware;
};

它确实记录了返回错误,但它也不会编译。

app.js

app.use(sass({
  src: path.join(__dirname + '/scss'),
  dest: path.join(__dirname + '/public/stylesheets'),
  outputStyle: 'compressed',
  indentedSyntax: false
}))

app.use(require('koa-static')(__dirname, 'public'))

文件夹结构

public
|--scss
|  |--style.scss
|--public
|  |--stylesheets
|  |  |--style.css
app.js

2 个答案:

答案 0 :(得分:0)

我相信包装器应该是这样的:

module.exports = function (options) {
    const sass = require('node-sass-middleware')(options);
    return (ctx, next) => {
        return new Promise((resolve, reject) => {
            sass.call(sass, ctx.req, ctx.res, (err) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(next());
                }
           });
       });
    };
};

此外,您可以看看https://github.com/vkurchatkin/koa-connect

答案 1 :(得分:0)

我知道这个答案可能晚了,但是对于任何偶然发现此问题的人来说:

koa-sassy

?适用于SASS的现代Koa中间件

安装

npm i koa-sassy

入门

const Koa = require('koa')
const sassy = require('koa-sassy')
const app = new Koa()

app.use(sassy(__dirname + '/sass'))