我正在与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
任务的第三行,以便它将处理多个源并将多个文件输出到build
文件夹。
但是我要坚持的是tailwind
任务然后如何知道使用与scss
任务中使用的名称相同的文件以及何时到达{{1 }}任务,怎么知道不使用build文件夹中的所有CSS文件,而只使用先前任务中使用的CSS文件?
是否可以将要使用的文件名从一个任务传递到下一个任务?还是应该采用其他方式?
答案 0 :(得分:0)
您可以将其输出到另一个文件夹(即pkg.paths.build.css
)中,而不是将已编译的scss输出到./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部分如何处理传递多个文件的情况。
答案 1 :(得分:0)
原来,我比我想像的要近。我唯一需要做的更改是在css
任务中。
return gulp.src(pkg.globs.distCss)
成为return gulp.src(pkg.paths.build.css + '**/*.css')
.pipe($.newer({dest: pkg.paths.dist.css + pkg.vars.siteCssName}))
成为.pipe($.newer({dest: pkg.paths.dist.css}))
我删除了.pipe($.concat(pkg.vars.siteCssName))
,因为我不再合并多个CSS文件。
现在,这会将CSS文件以与原始SCSS文件相同的文件名保存到build文件夹,然后将其编译并保存到dist文件夹,再次使用相同的文件名。