首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使sbt-concat从sbt-sass或sbt-less绑定样式。

无法使sbt-concat从sbt-sass或sbt-less绑定样式。
EN

Stack Overflow用户
提问于 2015-02-14 10:56:30
回答 1查看 553关注 0票数 6

(提供的示例项目)我无法让https://github.com/ground5hark/sbt-concat/按照设计的那样工作,以查找和连接可能由预处理任务生成的样式所产生的样式表。在我的生产应用程序中,我试图使用它来捆绑来自https://github.com/ShaggyYeti/sbt-sass的选择缩小的输出文件。它在该项目的复杂设置中不起作用,所以我创建了一个示例项目,看看是否可以让它工作。它在示例项目中也不起作用。下面是一个测试项目build.sbt,它试图创建几个捆绑包,几乎所有我都能想到的,只是看看它们是否有效(public Github repo,您应该能够克隆并立即复制问题):

代码语言:javascript
运行
复制
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; stageactivator到测试。我看到了复制到target文件夹中的资产源文件,声明的包的结果如下:

  • 样式- exist 1.css不存在
  • style-group2.css包含button.csscore.css的内容
  • style-group3.css包含core.cssbutton.css的内容
  • 样式- exist 4. does不存在
  • style-group5.css只包含core.css的内容
  • style-group6.css只包含已编译lessStyle.scss的内容
  • style-group7.css只包含已编译sassStyle.scss的内容
  • 样式-group8.css不存在

我不明白为什么第二和第三箱不拿起前处理器生产的css文件,但量身定做的第六和第七箱。也许值得注意的是,myPipelineTask的结果显示了所有源文件的PathMapping,以及来自Sass和更少任务的派生css和源代码映射。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-21 02:55:11

根据Typesafe支持,我的问题的根源在于sbt-concat实现其PathFinder逻辑的方式只能获取与源目录中相同的逐字文件名的资产。相对文件名序列适用于目标目录中的文件,但没有模式匹配。这是相当不幸的。

所做的工作是通过在源目录上使用一个Seq来构造输出文件的PathFinder,这些输出文件将在编译后存在。所以对于.scss文件,如下所示:

代码语言:javascript
运行
复制
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也是不必要的,因为您可以直接将该变量中的任何内容作为包文件名的前缀。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28514890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档