KOA2-使用node-SASS中间件将SASS编译为CSS



我正在尝试使用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弃用的对生成器的支持将在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

我认为包装器应该是这样的:

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

SASS 的现代Koa中间件

安装

npm i koa-sassy

入门

const Koa = require('koa')
const sassy = require('koa-sassy')
const app = new Koa()
app.use(sassy(__dirname + '/sass'))

最新更新