cheers-mp-service
Version:
提供插件化的零配置小程序脚手架服务
66 lines (58 loc) • 1.76 kB
JavaScript
const gulp = require("gulp");
const gulpSass = require("gulp-sass");
const gulpIf = require("gulp-if");
const gulpCDN = require("gulp-cdnify-plus");
const gulpRename = require("gulp-rename");
const gulpPostcss = require("gulp-postcss");
const deepmerge = require("deepmerge");
const px2rpx = require("./postcss-px2rpx");
gulpSass.compiler = require("dart-sass");
const defaultOpt = {
srcDir: "src",
outputDir: "dist",
isUseOSS: false,
rewriter: (url) => url,
};
function sass(opt, userOptions) {
opt = deepmerge(defaultOpt, opt);
const postcssPlugins = [];
const sassOption = Object.assign({}, { includePaths: [opt.srcDir] }, userOptions.css.scss || userOptions.css.sass);
if (Array.isArray(userOptions.css.postcss) && userOptions.css.postcss.length > 0) {
postcssPlugins.push(...userOptions.css.postcss);
}
if (userOptions.css.px2rpx) {
postcssPlugins.push(px2rpx(userOptions.css.px2rpx));
}
if (process.env.NODE_ENV === "production") {
postcssPlugins.push(
require("cssnano")({
preset: [
"default",
{
discardComments: { removeAll: true },
calc: false,
},
],
})
);
}
function compileSASS() {
return gulp
.src(`${opt.srcDir}/**/*.{scss,sass}`, { since: gulp.lastRun(compileSASS) })
.pipe(gulpSass(sassOption))
.pipe(gulpIf(postcssPlugins.length > 0, gulpPostcss(postcssPlugins)))
.pipe(
gulpIf(
opt.isUseOSS,
gulpCDN({
rewriter: opt.rewriter,
})
)
)
.pipe(gulpRename({ extname: ".wxss" }))
.pipe(gulp.dest(opt.outputDir));
}
compileSASS.displayName = "编译sass/scss";
return compileSASS;
}
module.exports = sass;