Gulp cwd 到项目根目录

Gulp cwd to project root

我当前的代码:

gulp.task('_sass', function() {
    var files = [
        './vendor/bower_components/bootstrap-sass/assets/stylesheets/_bootstrap.scss',
        './resources/assets/sass/main.scss',
        './vendor/bower_components/bootstrap-rating/bootstrap-rating.css',
        './vendor/bower_components/select2/select2.css'
    ];
    return gulp.src(files)
    //return gulp.src(files)
        .pipe(concat('all.css'))
        .pipe(sass())
        .on('error', notify.onError(function (error) {
            return "Error: " + error.message;
        }))
        .pipe(gulp.dest('./public/css/'))
        .pipe(reload({stream: true}));
});

如您所见,我有一个文件数组,我在其中存储了我想要连接到 all.css 中的 .scss 文件的所有路径。但是我得到这个错误:

Error: file to import not found or unreadable: base/normalize
Current dir: /Users/**/Code/Laravel/vendor/bower_components/bootstrap-sass/assets/stylesheets/

这很明显,因为 gulp 使用数组的第一个路径作为它的基本目录。所以我尝试将 basecwd 设置为 './',这样我就可以指定我的 Laravel 根目录。但这是行不通的。我怎样才能解决这个问题,这样我就可以使用所有这些 .scss 文件而不用将文件复制到其他目录?

这是一个棘手的问题,因为您不需要相对于 gulpfile 的基本工作目录,而是相对于所有 Sass 组件的目录。

我说的对吗 './resources/assets/sass/main.scss' 是您自己使用的主要 Sass 文件?如果是这样,我建议在此处导入 bootstrap:

 @import '../../../vendor/bower_components/bootstrap-sass/assets/stylesheets/_bootstrap';

在让 Sass 处理文件时,Sass 通常在处理相对 URL 方面要好得多。

我会拆分 Sass 和 CSS 文件,稍后使用流队列将它们捆绑:

var queue = require('streamqueue');

gulp.task('_sass', function() {
    return queue(
        // our CSS files
        gulp.src([
            './vendor/bower_components/bootstrap-rating/bootstrap-rating.css',
            './vendor/bower_components/select2/select2.css']
        ),
        // our Sass file, compiled to CSS
        gulp.src('./resources/assets/sass/main.scss')
            .pipe(sass())
    )
    // all the rest
    .pipe(concat('all.css'))
    .on('error', notify.onError(function (error) {
        return "Error: " + error.message;
    }))
    .pipe(gulp.dest('./public/css/'))
    .pipe(reload({stream: true}));
});