【发布时间】:2025-12-05 05:55:01
【问题描述】:
EDIT: 正如我在标题和开头所写的,这与命令行参数无关,因此不是重复的。 //EDIT
我有一个 Sass 设置,其中包含无限数量的独特设计页面(page_1、page_2 等),每个都有自己的 sass/pages/page_1/page_1.scss 文件。
页面都属于同一个网站,每个页面的sass文件@imports来自sass/includes文件夹的同一组文件。
通过观看sass/**/* 的基本 gulp 任务,每当我更改任何页面的样式时,每个页面的样式都会被编译。显然这不能很好地扩展。
我尝试使用gulp-watch,但如果对包含的.scss 文件之一进行了更改,它不会捕获。它只捕获对实际编译为等效.css 的文件所做的更改。
为了让我的 gulpfile 尽可能 DRY,我能想出的最佳解决方案是在 gulpfile.js 中维护一个基本的文件夹名称数组,并循环遍历并分别查看它们中的每一个,使用每个文件夹都执行相同的 sass 编译任务。
var pageFolderNames = [
'page_1',
'page_2'
// etc
];
那么对于 gulp 任务,我有:
gulp.task('watch_pages', function()
{
// Get array length
var numPages = pageFolderNames.length;
// Add a new watch task for each individual page
for (var i = 0; i < numPages; i++)
{
gulp.watch('sass/pages/' + pageFolderNames[i] + '/**/*.scss', ['sass_page']);
}
});
编译 sass 的(简化的)任务:
// Task: Compile page-specific Sass
gulp.task('sass_page', function()
{
return gulp.src('sass/pages/' + pageFolderNames[i] +'/**/*.scss')
.pipe(plumber(plumberErrorHandler))
.pipe(sass(...))
.pipe(gulp.dest('css/pages/' + pageFolderNames[i]));
});
这种方法(我知道我的 JS-fu 很弱)导致错误:
'sass_page' errored after 71 μs
ReferenceError: i is not defined
有没有办法将参数(例如i)传递给 gulp 任务以使其正常工作?或者,有没有更好的方法来完成我想要做的事情?我有一个偷偷摸摸的怀疑。 :-/
【问题讨论】:
-
我删除了我的答案。据我了解,您想查看特定文件夹并在该特定文件夹上运行任务 sass_page 。我说的对吗?
-
@PaulSwetz 不一样。我发现的所有“传递参数”帖子都与通过命令行这样做有关。我特别想通过内部逻辑而不是通过命令行来这样做。
-
@Brian 是的,没错...每个特定文件夹都单独监视并由单个监视任务编译。
-
@Sandwich 我之前重新打开了我的答案,希望对您有所帮助。
标签: javascript sass gulp