css - gulp-sass includePaths 未能包含供应商 scss(也可能是订购问题)

标签 css sass gulp gulp-sass

我的应用程序 sass(在 scss 文件中)在我的 styles 目录中的各个子目录中,其中一些 @extend 来自不同供应商的 sass 样式,(通过 bower ) 位于 vendor 目录下的各个子目录中。

不幸的是,sass 任务无法获取那些供应商 scss 文件和我失败的任何 @extend 声明,因为他们找不到他们试图扩展的 sass,例如

Error in plugin 'sass'
Message:
    styles/censum/censum.scss
Error: ".graph-row" failed to @extend ".row".
       The selector ".row" was not found.
       Use "@extend .row !optional" if the extend should be able to fail.
        on line 2 of styles/censum/censum.scss

我的最小化示例如下。

gulp.task('sass', function () {
  gulp.src('./styles/**/*.scss')
    .pipe(gulpSass({ includePaths: ['./vendor'] }).on('error', gulpSass.logError));
});

我还尝试将供应商目录添加到 gulp.src 而不是使用 includePaths,例如

gulp.task('sass', function () {
  gulp.src(['./vendor/**/*.scss', './styles/**/*.scss'])
    .pipe(gulpSass().on('error', gulpSass.logError));
});

这似乎确实引用了供应商文件(因为我猜它拖拽了所有内容),但我确实遇到了以下问题:

Message:
    vendor/bower/eonasdan-bootstrap-datetimepicker/src/sass/_bootstrap-datetimepicker.scss
Error: Undefined variable: "$btn-primary-bg".
        on line 7 of vendor/bower/eonasdan-bootstrap-datetimepicker/src/sass/_bootstrap-datetimepicker.scss
$bs-datetimepicker-active-bg: $btn-primary-bg !default;

这可能是顺序问题?

最佳答案

我分享的内容是基于我对您的问题的理解。我将从一个新元素的 Angular 来讨论它,这对我来说似乎工作得很好。

假设我们有一个名为 sassy 的元素,其中有一个通过运行以下命令创建的 package.json 文件:

npm init -y

然后我们将像这样安装 Gulp 和 SASS 组件:

npm install gulp gulp-sass -save-dev

在元素根目录的 Gulpfile.js 中,我们有以下代码:

var gulp = require('gulp');
var sass = require('gulp-sass');

gulp.task('sass', function () {
  return gulp
    .src("./scss/**/*.scss")
    .pipe(sass({includePaths: ['./vendor']}))
    .pipe(gulp.dest("./dist"));
});

您可能从上面的代码中猜到,我们在元素的根目录下有一个vendor 目录和一个scss 目录。

因为我不知道您的vendor 目录中有什么,所以我随机填充了我的目录。在 vendor/colors.scss 文件中,我有以下内容:

.danger {
    color: red;
}

.light {
    color: silver;
}

我还在 vendor/sizing/article.scss 找到了一个嵌套文件,其中包含以下代码:

.title {
    font-size: 22px;
}

现在让我们看看我的 scss 目录里有什么。

我有一个 scss/main.scss 文件,其中包含如下两个导入语句:

@import "./sidebar/navigation";
@import "./content/blog";

同样,这个元素的所有内容都是随机的。我只是想展示所有这些文件和目录的构建过程。

我的 scss 文件夹中还有两个 SCSS 文件。我有一个包含以下代码的文件 scss/sidebar/navigation.scss:

nav {
    padding: 10px;
}

我终于有了一个包含大量导入和扩展的文件。此文件是 scss/content/blog.scss,它包含以下内容:

@import "colors";
@import "sizing/article";

.title {
    @extend .danger;
    @extend .title;
    font-weight: bold;
}

因为 Gulp 脚本包含 vendors 目录,我们可以对任何文件使用相对路径。我们从 vendor 目录导入这两个文件,然后在必要时扩展各种类。

运行 gulp sass 将在元素的 dist 目录中构建 CSS 文件。由于我只使用 scss/main.scss 进行导入,它将包含我们所有的样式。

这就是你想要做的吗?如果是,请浏览我刚刚分享的所有内容,看看它是否适合您。

关于css - gulp-sass includePaths 未能包含供应商 scss(也可能是订购问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38247863/

相关文章:

node.js - 如何从另一个 gulpfile 运行构建?

html - 如何在 Dreamweaver 设计 View 中并排放置 DIVS

html - 具有更高 z-index 的导航栏覆盖的元素

html - 检查伪选择器在 IE 中不起作用

javascript - Gulp 将多个 js 文件缩小为一个

css - Gulp - BrowserSync 不重新加载页面

css - Node + React - 带连字符的 CSS 类名

html - 在响应式全宽 slider 中将图像裁剪到中心

css - Bootstrap 不会加载 rails 和 sass

vim - Sass 的语法高亮在 Vim 中不起作用