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

KOA 2 - Compile SASS to CSS using node-sass-middleware

我正在尝试使用 koa2 获取节点-sass-中间件。有一个模块 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 Support for generators will be removed in v3. See the documentation for examples of how to convert old middleware 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;
};

它确实注意到 return 一个错误,但它也不会编译。

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

我认为 wrapper 应该是这样的:

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

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

koa-sassy

Modern Koa middleware for SASS

安装

npm i koa-sassy

入门

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

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