【发布时间】:2017-06-06 09:18:49
【问题描述】:
我正在尝试解析所有文件夹中的所有 SCSS 文件,并且我需要它们位于原始文件的相对目标中。
这是我想要的文件夹结构的表示(基本上,scss文件夹中的scss文件需要保存为原始scss文件夹旁边的css文件夹中的css文件)和流氓scss文件(不在scss文件夹中)应该有css文件保存在与 scss 文件相同的目标位置。
html
│ README.md
│
└───app_abc
│ │ index.php
│ │ something_else.php
│ │
│ └───styles
│ └───scss
│ │ _mixins.scss
│ │ layout.scss
│ │ content.scss
│ │
│ └───css
│ layout.css
│ content.css
│
└───app_def
│ │ index.php
│ │ something_else.php
│ │ rogue.scss
│ │ rogue.css
│ │
│ └───styles
│ └───scss
│ │ _mixins.scss
│ │ layout.scss
│ │ content.scss
│ │
│ └───css
│ layout.css
│ content.css
└───app_ghi
...
我昨天和今天尝试玩了几个小时,但无济于事。我可以在同一个文件夹中创建 CSS 文件,但这不是我想要的。
这是我的 gulpfile.js(里面有很多“调试”的东西)。
var gulp = require('gulp'),
sass = require('gulp-sass'),
path = require('path'),
through = require('through2');
const debug = require('gulp-debug');
const sassFiles = './html/**/[^_]*.scss';
function parsePath() {
return through.obj(function (file, enc, cb) {
console.log(file.base);
console.log(file.cwd);
console.log(file.path);
console.log(file.name);
console.log(path.relative(file.cwd, file.path));
console.log(path.relative(path.join(file.cwd, file.base), file.path))
console.log(path.relative(path.join(file.cwd, file.base), file.path).replace('scss', 'css'))
console.log(file.path.replace(file.name, '').replace('scss', 'css'))
cb();
});
}
gulp.task('sass', function(){
return gulp.src(sassFiles)
.pipe(debug({title: 'test:', minimal: false}))
.pipe(parsePath())
.pipe(sass().on('error', sass.logError))
//.pipe(gulp.dest('css'))
//.pipe(gulp.dest(function (file) {
//return file.path.replace('scss', 'css');
//return path.relative(path.join(file.cwd, file.base), file.path).replace('scss', 'css');
//}))
.pipe(gulp.dest(function (file) {
console.log(file.base);
return file.base;
}));
});
gulp.task('watch', ['sass'], function(){
gulp.watch(sassFiles, ['sass']);
})
感谢您的帮助。
Ps.:无论如何,我在 Debian Jessie x64 上运行。
Pps.:我用谷歌搜索并阅读了很多 stackoverflow 线程,但没有一个能解决我的问题(好吧,如果有,它对我不起作用)。
【问题讨论】:
-
您确定要单独的 .css 文件,而不是将所有 scss 文件编译成一个 css?我理解对了吗?例如,您有 2 个应用程序文件夹,其中 SCSS 文件位于一个文件夹中,CSS 位于另一个文件夹中。现在你想简单地编译它们?为什么不在每个应用程序文件夹中执行这个 gulp 任务?第一步会更容易
-
@MarkusG。是的,我敢肯定。我们不会在每个页面上都包含所有文件,并且我们有我们的自定义压缩器,它还将特定页面(模块)上使用的所有文件合并到一个文件中。有超过 2 个应用程序文件夹,并且并非所有文件夹都有任何前端(所以根本没有 scss 文件)。我需要它灵活,所以如果我们添加新的应用程序文件夹,它会自动编译它们。问题是,我的老板喜欢在服务器上实时编辑文件,所以我需要一些能够自动编译 scss 文件并将其保存为 css 的东西,如果他决定自动使用我的 sass 而不用我知道他做了什么...跨度>
-
关于多个 css 文件,你想多了。每个页面都有一个捆绑包会扼杀优化,因为您会迫使用户从稍微不同的捆绑包中重新下载相同的 css。相反,您应该拥有一个第三方捆绑包(引导程序、插件等)和一个符合您风格的捆绑包。这样,浏览器缓存将加载 2 个文件,然后无需再次下载它们。之后的编译流程就是个笑话!
-
@EmileBergeron 我忘了添加,我无法更改文件夹结构。我不负责它,我永远不会。我正在尝试为我们公司带来一些新技术。相信我,您不想看到我们的工作流程。这就是为什么我需要我所要求的。如果不可能,那么这家公司可能永远不会切换到 SASS。 Ps.:我们的缩小器以简单的方式工作,您可以告诉它缩小文件并将其合并到站点范围的 css 中,将其合并到具有自定义名称的 css 文件中,或者只是缩小文件而不合并。它不会强迫你下载 100 个 css 文件