KOA 2 — Компиляция SASS в CSS с помощью node-sass-middleware

Я пытаюсь получить node-sass-middleware, используя koa2. Есть модуль 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 deprecated Поддержка генераторов будет удалена в 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

person Kleav James    schedule 15.11.2018    source источник


Ответы (2)


Я считаю, что оболочка должна быть такой:

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

person wanjas    schedule 15.11.2018
comment
Оно работает. Спасибо. Но я не понимаю, почему async/await не работает? - person Kleav James; 15.11.2018
comment
Поскольку await sass.bind(sass, ctx.req, ctx.res); не является фактическим вызовом функции, он возвращает (и никогда не использует) связанную промежуточную функцию, которая ранее обрабатывалась как выход из генератора. - person wanjas; 16.11.2018

Я понимаю, что этот ответ может быть поздним, но для тех, кто наткнется на это:

koa-sassy

???? Современное промежуточное ПО Koa для SASS

Установить

npm i koa-sassy

Начиная

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

app.use(sassy(__dirname + '/sass'))
person Dominic Egginton    schedule 10.04.2020