加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 无法让sbt-concat从sbt-sass或sbt-less中捆绑样式

发布时间:2020-12-16 18:44:57 所属栏目:安全 来源:网络整理
导读:(提供的示例项目)我无法使 sbt-concat 工作,以便查找和连接由可能从预处理器任务生成的样式产生的样式表.在我的生产应用程序中,我正在尝试使用它来捆绑来自 sbt-sass 的选择缩小的输出文件.它在该项目的复杂设置中不起作用,因此我创建了一个示例项目,看看我
(提供的示例项目)我无法使 sbt-concat工作,以便查找和连接由可能从预处理器任务生成的样式产生的样式表.在我的生产应用程序中,我正在尝试使用它来捆绑来自 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"))
)

我跑;清洁;重装;从激活器到测试的阶段.我将资产源文件复制到目标文件夹中,声明的包的结果如下:

> style-group1.css不存在
> style-group2.css包含button.css和core.css的内容
> style-group3.css包含core.css和button.css的内容
> style-group4.css不存在
> style-group5.css仅包含core.css的内容
> style-group6.css仅包含已编译的lessStyle.scss的内容
> style-group7.css仅包含已编译的sassStyle.scss的内容
> style-group8.css不存在

我不明白为什么第二和第三种情况都没有拿起预处理器生成的css文件,但是经过量身定制的第6和第7种情况.也许值得注意的是,myPipelineTask的结果显示了所有源文件的PathMappings,以及来自Sass和Less任务的派生css和sourcemaps.

解决方法

根据Typesafe支持,??我的困境的来源是sbt-concat以这样的方式实现其PathFinder逻辑,即只获取与源目录中的文件名相同的资源.相对文件名序列适用于目标目录中的文件,但没有模式匹配.这是相当不幸的.

通过在源目录上使用路径查找器来构造将在编译后存在的输出文件的Seq是什么工作.对于.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也是不必要的,因为您可以直接将该变量中的任何内容作为捆绑文件名的前缀.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读