(提供的示例项目)我无法让https://github.com/ground5hark/sbt-concat/按照设计的那样工作,以查找和连接可能由预处理任务生成的样式所产生的样式表。在我的生产应用程序中,我试图使用它来捆绑来自https://github.com/ShaggyYeti/sbt-sass的选择缩小的输出文件。它在该项目的复杂设置中不起作用,所以我创建了一个示例项目,看看是否可以让它工作。它在示例项目中也不起作用。下面是一个测试项目build.sbt
,它试图创建几个捆绑包,几乎所有我都能想到的,只是看看它们是否有效(public Github repo,您应该能够克隆并立即复制问题):
import com.typesafe.sbt.web.Import.WebKeys._
import com.typesafe.sbt.web.pipeline.Pipeline
name := """sbt-concat-test"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayScala, SbtWeb)
scalaVersion := "2.11.1"
libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
ws
)
resolvers += Resolver.sonatypeRepo("releases")
includeFilter in (Assets, LessKeys.less) := "*.less"
excludeFilter in (Assets, LessKeys.less) := "_*.less"
val myPipelineTask = taskKey[Pipeline.Stage]("Some pipeline task")
myPipelineTask := { mappings => println(mappings); mappings }
pipelineStages := Seq(myPipelineTask, concat)
Concat.groups := Seq(
"style-group1.css" -> group(sourceDirectory.value ** "*.css"),
"style-group2.css" -> group(baseDirectory.value ** "*.css"),
"style-group3.css" -> group((sourceDirectory in Assets).value ** "*.css"),
"style-group4.css" -> group(target.value ** "*.css"),
"style-group5.css" -> group(Seq("core.css", "styles/core.css", "assets/styles/core.css", "app/assets/styles/core.css")),
"style-group6.css" -> group(Seq("lessStyle.css", "ui/lessStyle.css", "styles/ui/lessStyle.css", "assets/styles/ui/lessStyle.css", "app/assets/styles/ui/lessStyle.css")),
"style-group7.css" -> group(Seq("sassStyle.css", "ui/sassStyle.css", "styles/ui/sassStyle.css", "assets/styles/ui/sassStyle.css", "app/assets/styles/ui/sassStyle.css")),
"style-group8.css" -> group(Seq("**/*.css"))
)
我运行; clean; reload; stage
从activator
到测试。我看到了复制到target
文件夹中的资产源文件,声明的包的结果如下:
button.css
和core.css
的内容core.css
和button.css
的内容core.css
的内容lessStyle.scss
的内容sassStyle.scss
的内容我不明白为什么第二和第三箱不拿起前处理器生产的css
文件,但量身定做的第六和第七箱。也许值得注意的是,myPipelineTask
的结果显示了所有源文件的PathMapping
,以及来自Sass和更少任务的派生css
和源代码映射。
发布于 2015-02-21 02:55:11
根据Typesafe支持,我的问题的根源在于sbt-concat实现其PathFinder
逻辑的方式只能获取与源目录中相同的逐字文件名的资产。相对文件名序列适用于目标目录中的文件,但没有模式匹配。这是相当不幸的。
所做的工作是通过在源目录上使用一个Seq
来构造输出文件的PathFinder
,这些输出文件将在编译后存在。所以对于.scss文件,如下所示:
Concat.groups := {
// Determine the output names of the style files to bundle
// This is really roundabout because sbt-concat only offers 2 ways of
// specifying files, relative paths and using a PathFinder, and the
// latter approach restricts itself to source files instead of output files.
val sourceDir = (sourceDirectory in Assets).value
val scssFiles = (sourceDir ** "*.scss").getPaths
val scssRelativePaths = scssFiles.map(_.stripPrefix(sourceDir.getPath).stripPrefix("/"))
val outputRelativePaths = scssRelativePaths.map(_.stripSuffix(".scss") + ".min.css")
Seq("bundle.min.css" -> group(outputRelativePaths))
}
另外,sbt-concat的另一个奇怪之处是,它不会将新文件放在web-assets:assetsTarget
的自己目录中,以将它们与其他管道阶段的工件分离开来。Concat.parentDir
也是不必要的,因为您可以直接将该变量中的任何内容作为包文件名的前缀。
https://stackoverflow.com/questions/28514890
复制相似问题