我使用NPM和Gulp作为包管理器和构建系统。我安装了"gulp-sass"来支持sass,并安装了"kulp-clean-css",这样我就可以内联导入css文件。我在"_frontend/SCSS/**/*"中捕获我的SCSS文件,并将其编译为"assets/frontend/css/styles.css"的单个文件。在输出位置,我有其他重要的资源文件夹,它们是"css"的兄弟文件夹:"font"、"img"one_answers"js"。
我的问题是,当我导入一个"*.css"文件时,我无法正确地获得url()到目标的相对路径。不过,当我导入".scs"文件时,这是可以的。
这是我的代码(我拿出了源地图、错误日志等来简化问题):
GULPFILE.JS
gulp.task('styles', function() {
gulp.src(styles.src)
.pipe(sassGlob()) // Support for bundle requires for Sass
.pipe(cleanCSS({
// relativeTo: './node_modules', <-- I tried with different variations here, no luck
// root: './node_modules', <-- I tried with different variations here, no luck
processImport: true
}))
.pipe(rename('styles.css')) // Name output CSS file
.pipe(gulp.dest('../assets/frontend/css/'));
});
MAIN.SCSS
以下内容正常
@import "font-awesome/scss/font-awesome.scss";
输出似乎带有正确的相对路径示例输出:url(../fonts/FontAwesome/font真棒webfont.eot?v=4.6.1)
以下不是
@import '../node_modules/jquery-ui/themes/base/jquery-ui.css';
示例输出:url(../node_modules/jquery ui/themes/base/images/animated overlay.gif)^^上面以某种方式附加了"../node_modules"。我希望它以某种方式将其设置为"../img/vendor/jquery ui/what/ever/I/like/here"
这是我的目录结构
_frontend
├─fonts
│ ├─Beamstyle-Icons
│ └─Gotham-Light-Regular
├─node_modules
│ ├─jquery-ui
│ │ ├─scripts
│ │ └─themes
│ │ ├─base
│ │ ├─images
│ │ └─minified
│ │ └─images
│ └─ (other stuff...)
│
├─scripts
│ ├─app
│ └─vendor
└─scss
├─config
├─helpers
│ ├─classes
│ ├─functions
│ ├─mixins
│ └─placeholders
└─src
├─blocks
└─components
assets
└─frontend
├─css
├─fonts
├─img
│ ├─Beamstyle-Icons
│ ├─FontAwesome
│ └─Gotham-Light-Regular
└─js
如果有人能帮上忙就太好了。
对于版本<2.4
使用relativeTo
、root
和target
,如果不想重新设置基准,可以使用rebase: false
配置选项。
对于>=2.4版本
gulp-clean-css已经升级为使用clean-css 4.x,所以上面的选项都不起作用,它们只提供rebaseTo
选项,该选项将重新设置所有路径的基础。
我使用relativeTo使其工作。
医生说:(https://www.npmjs.com/package/clean-css)
relativeTo-解析relative@import规则和URL 的路径
这意味着relativeTo+目标路径必须从gullfile.js指向css资产(字体、图像)指向的相对目录。
示例:
---project
+---assets
| ---stylesheets
| | style.css
| |
| ---dist
| style.min.css
|
| ---fonts
| my-font.ttf
---gulp
gulpfile.js
目标路径(从gulpfile)设置为'../assets/stylesheets/dist'
我的任务是:
// Create minified css
gulp.task('minifycss', function() {
return gulp
.src('../assets/stylesheets/*.css')
.pipe(cleancss({relativeTo: '../assets/', compatibility: 'ie8'}))
.pipe(rename({
suffix: ".min" // add *.min suffix
}))
.pipe(gulp.dest('../assets/stylesheets/dist'))
});
输出:
// style.css :
src: url("../fonts/my-font.ttf");
// dist/style.min.css :
src: url("../../fonts/my-font.ttf");