gpt4 book ai didi

css - 编译不同 SCSS 文件的 Gulp 组合任务

转载 作者:行者123 更新时间:2023-11-27 23:50:26 30 4
gpt4 key购买 nike

我正在处理类似于 https://nystudio107.com/blog/a-better-package-json-for-the-frontend 中描述的过程但想修改它以便能够将不同的 SCSS 文件编译为同名的 CSS 文件,例如fileA.scss 编译为 fileA.css

如果我只使用一个 SCSS 文件 master.scss 编译为 site.combined.min.css,我现在所拥有的工作正常

来自 package.json

"paths": {
"src": {
"base": "./src/",
"css": "",
"img": "./src/img/",
"js": "./src/js/",
"scss": "./src/scss/"
},
"dist": {
"base": "./public/",
"css": "./public/assets/css/",
"js": "./public/assets/js/",
"fonts": "./public/assets/fonts/",
"img": "./public/assets/img/"
},
"build": {
"base": "./build/",
"css": "./build/css/",
"js": "./build/js/",
"html": "./build/html/",
"img": "./build/img/"
},
"tailwindcss": {
"src": "./build/css/master.css",
"conf": "./tailwind.config.js"
},
"scss": [
{
"src": "./src/scss/master.scss"
}
],
"templates": "./public/site/templates/"
},
"vars": {
"siteCssName": "site.combined.min.css",
"scssName": "master.scss",
"cssName": "master.css"
},
"globs": {
"distCss": [
"./node_modules/normalize.css/normalize.css",
"./build/css/*.css"
],
"purgecss": [
"./html/index.html",
"./html/site/templates/**/*.{twig}",
"./src/js/site.js",
"./html/assets/js/*.js"
],
"purgecssWhitelist": []
},

Gulp 任务

gulp.task("scss", () => {
$.fancyLog("-> Compiling scss");
// return gulp.src(pkg.paths.src.scss + pkg.vars.scssName)
return gulp.src(pkg.paths.src.scss + '*.scss')
.pipe($.plumber({errorHandler: onError}))
.pipe($.sourcemaps.init({loadMaps: true}))
.pipe($.sass({
includePaths: pkg.paths.scss
})
.on("error", $.sass.logError))
.pipe($.cached("sass_compile"))
.pipe($.autoprefixer())
.pipe($.sourcemaps.write("./"))
.pipe($.size({gzip: true, showFiles: true}))
.pipe(gulp.dest(pkg.paths.build.css));
});

gulp.task("tailwind", () => {
$.fancyLog("-> Compiling tailwind css");
return gulp.src(pkg.paths.tailwindcss.src)
.pipe($.postcss([
$.tailwindcss(pkg.paths.tailwindcss.conf),
require("autoprefixer"),
]))
.pipe($.if(process.env.NODE_ENV === "production",
$.purgecss({
extractors: [{
extractor: TailwindExtractor,
extensions: ["twig", "scss", "css", "js"]
}],
whitelist: pkg.globs.purgecssWhitelist,
content: pkg.globs.purgecss
})
))
.pipe(gulp.dest(pkg.paths.build.css));
});

class TailwindExtractor {
static extract(content) {
return content.match(/[A-z0-9-:\/]+/g);
}
}

gulp.task("css", ["tailwind", "scss"], () => {
$.fancyLog("-> Building css");
return gulp.src(pkg.globs.distCss)
.pipe($.plumber({errorHandler: onError}))
.pipe($.newer({dest: pkg.paths.dist.css + pkg.vars.siteCssName}))
.pipe($.print())
.pipe($.sourcemaps.init({loadMaps: true}))
.pipe($.concat(pkg.vars.siteCssName))
.pipe($.if(process.env.NODE_ENV === "production",
$.cssnano({
discardComments: {
removeAll: true
},
discardDuplicates: true,
discardEmpty: true,
minifyFontValues: true,
minifySelectors: true
})
))
.pipe($.header(banner, {pkg: pkg}))
.pipe($.sourcemaps.write("./"))
.pipe($.size({gzip: true, showFiles: true}))
.pipe(gulp.dest(pkg.paths.dist.css))
.pipe($.filter("**/*.css"))
.pipe($.livereload());
});

你可以看到我已经替换了 scss 任务的第 3 行,这样它将处理多个源并将多个文件输出到 build 文件夹。

但我遇到的问题是 tailwind 任务如何知道使用与 scss 任务中使用的名称相同的文件以及何时使用进入 css 任务,它怎么知道不使用构建文件夹中的所有 CSS 文件,而只使用之前任务中使用的 CSS 文件?

有没有办法将要使用的文件名从一个任务传递到下一个任务?还是应该以不同的方式完成?

最佳答案

不是将编译后的 scss 输出到 pkg.paths.build.css,而是将其输出到不同的文件夹(即 ./build/scss/),并将该文件夹设置为您的 pkg.paths.tailwind.src?

或者,您可以尝试将 pkg.paths.tailwind.src 设置为命名文件的数组,例如

"tailwindcss": {
"src":[pkg.paths.build.css + "fileA.css", pkg.paths.build.css + "fileB.css"],
"conf": "./tailwind.config.js"
},

无论哪种方式,这都取决于 tailwind 任务的 PostCSS 部分如何处理传递的多个文件。

关于css - 编译不同 SCSS 文件的 Gulp 组合任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56574338/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com