Sass 当工作目录深度嵌套且 includePaths 是相对的时编译失败

Sass compilation fails when working directory is deeply nested and includePaths is relative

尝试使用 gulp-sass/node-sass/libsass 导入 npm 包的 scss 时,失败

../../app/assets/stylesheets/_engine.scss
Error: File to import not found or unreadable: bootstrap-material-design/scss/core
       Parent style sheet: /Users/kross/projects/acme/app/assets/stylesheets/_engine.scss
        on line 6 of ../../app/assets/stylesheets/_engine.scss
>> @import "bootstrap-material-design/scss/core";
   ^

版本:

node-sass@3.4.2
gulp-sass@2.2.0

While investigating this issue,我已经缩小了潜在外部问题的范围。在这个位置替换哪个文件或者它的内容(甚至是空内容)都没有关系,libsass 似乎无法找到嵌套的@import relativefound 文件的路径。

在这种情况下:

  1. includePaths: ['../../node_modules']

  2. 编译命令cd spec/dummy && gulp sass目标application.scss

  3. 结构

注意:很明显core是在node_modules

里面的bootstrap-material-design包里面

很明显找到了嵌套文件_core.scss,但是嵌套文件找不到与之相关的文件。

另请注意,如果我的 cwd 位于该项目的根目录,则我 _can_compile。将 cwd 下移到 spec/dummy 并编译,突然找不到这个嵌套的相对文件。

我在这里错过了什么?

我将 includePaths 相对路径切换为完全限定路径并且它有效。 This appears to be a bug.

解决方法是确保任何传入的 includePaths 都是完全限定的目录名称。

This gulp-pipeline recipe 使用 findup 来做到这一点:

  options: {
    includePaths: [findup('node_modules')] // find any node_modules above the current working directory and return the fully qualified path
  }