我正在寻找一组Gulp插件链,它提供:
- 源映射支持
- less
- 压缩
- 合并
- URL替换(重定位/连接)以解决重定位/合并问题
目前我已经有了前四个,但我找不到一组现有的插件组合,可以给我最后一个(URL重定位)。我没有找到任何输出sourcemap的URL重定位插件。
只是为了明确,我的问题是当我从项目开发文件夹中编译多个小CSS文件,并将它们输出到一个公共文件夹中时,由于合并引起的移动会破坏相对URL,例如用于背景图像的URL。
编辑:
听起来我目前使用的工具链已经旨在解决这个问题。所以,这就是答案。然而,这又引发了另一个问题,所需语法应该如何工作。
理论上,这个问题有很多重复内容:
- clean-css # 152:重定位功能非常令人沮丧
- clean-css # 195:Windows上的
root
选项 - clean-css # 263:如何使不同路径中的CSS文件与relativeTo选项一起工作
- http://adilapapaya.com/docs/clean-css/#howtorebaserelativeimageurls
- Grunt cssmin重定位相对URI?
不幸的是,没有答案真正解释了语法,它们只是演示巫术;所以我不知道以下内容为什么不起作用。如果我能解决它,我会回到这里并标记它为已接受,以表明这个工具链确实可以做到我需要的。
源文件:
/assets
/site
styleInput1.less "url(../site/logo.png)"
logo.png
background.png
/application
styleInput2.less "url(../site/background.png)"
gulp任务:
gulp.task(filename, function () {
return gulp.src(files)
.pipe(sourcemaps.init())
.pipe(less())
.pipe(minifyCss({ relativeTo: './compiled' }))
.pipe(concat(filename))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./compiled'));
});
输出结果,包含损坏的URL。请注意多个缺陷。尽管CSS相对于所需资源提高了一个目录级别,但添加了一个额外的父目录!此外,其中一个URL已更改了硬资产文件夹名称。非常奇怪:
/compiled
styleOutput1.css "url(../../compiled/logo.png)"
styleOutput2.css "url(../../site/background.png)"
非常抱歉,我继续使用“巫毒”(指之前的技术方案)了,但这是我的有效gulp管道:
.pipe(minifyCss({ relativeTo: './compiled', target: './compiled' }))
正确的输出:
/compiled
styleOutput1.css "url(../assets/site/logo.png)"
styleOutput2.css "url(../assets/site/background.png)"
gulp-minify-css
!我没有意识到它有这个功能,但现在我正在尝试它。 - shannonrelativeTo
并没有按照我的期望工作,而且我也不理解它与root
和target
有何不同,文档中也没有说明。 - shannonrelativeTo
、target
和root
参数中指定。文档清楚地说明了target
用于相对URL,root
用于绝对URL,而relativeTo
则以某种方式与前两者交互。但它没有解释如何交互。请参见我的OP编辑,了解有关我的修复信息。 - shannonrelativeTo
是您源CSS文件的路径,而target
是您清理后的CSS文件的目标路径。像@shannon一样,我需要同时使用relativeTo
和target
。我还没有尝试过root
,但我认为它是在clean-css处理之前URL的原始根。 - lastoneisbearfoodrebase: false
完美解决了问题。 - Thomas Taylor