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 relative 到 found 文件的路径。
在这种情况下:
includePaths: ['../../node_modules']
编译命令cd spec/dummy && gulp sass
目标application.scss
结构
注意:很明显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
}
尝试使用 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 relative 到 found 文件的路径。
在这种情况下:
includePaths: ['../../node_modules']
编译命令
cd spec/dummy && gulp sass
目标application.scss
结构
注意:很明显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
}