没有 Play 的最小 sbt-web 管道
Minimal sbt-web pipeline without Play
我正在使用 spray 创建单页应用程序,但无法让 sbt-web 处理我的任何输入。我从 WebJars 开始,因为 https://github.com/sbt/sbt-web/blob/master/README.md 说:
One last thing regarding the public and public-test folders... any WebJar depended on by the project will be automatically extracted into these folders e.g. target/web/public/lib/jquery/jquery.js.
但是,我在目标文件夹中没有看到这样的 "web" 文件夹。我想也许 WebJars 的例子太复杂了,所以我改为将 jquery.js 文件添加到资产文件夹的根目录,并设置 sbt-uglify 对其进行一些处理。然而,我仍然没有看到 SbtWeb 正在运行的证据。我已经 运行 sbt --debug clean run
并搜索了 SbtWeb 或 Uglify 的任何输出的输出,但没有错误或警告,也找不到任何关于 SbtWeb 或 Uglify 的内容。只是承认它似乎 "deduce" 插件:
[debug] deducing auto plugins based on known facts [debug] :: sorting:: found:
...
[debug] :: sorted deduced result: List(sbt.plugins.CorePlugin, com.typesafe.sbt.web.SbtWeb, com.typesafe.sbt.jse.SbtJsEngine, net.ground5hark.sbt.concat.SbtConcat, sbt.plugins.IvyPlugin, com.typesafe.sbt.jse.SbtJsTask, sbt.plugins.JvmPlugin, com.typesafe.sbt.uglify.SbtUglify, sbt.plugins.JUnitXmlReportPlugin)
这是我的目录结构:
./build.sbt
./project/plugins.sbt
./src/main/assets/js/jquery.js
./src/main/resources/html/uikit/login.html
./src/main/scala/Boot.scala
./src/main/scala/main.scala
这是我的 project/plugins.sbt:
resolvers += Resolver.sonatypeRepo("releases")
addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.0.2")
addSbtPlugin("net.ground5hark.sbt" % "sbt-concat" % "0.1.8")
addSbtPlugin("com.typesafe.sbt" % "sbt-uglify" % "1.0.3")
这是我的./build.sbt:
organization := "com.test123.spray"
version := "0.1"
scalaVersion := "2.11.6"
scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8")
libraryDependencies ++= {
val akkaV = "2.3.9"
val sprayV = "1.3.3"
Seq(
"io.spray" %% "spray-can" % sprayV,
"io.spray" %% "spray-routing" % sprayV,
"io.spray" %% "spray-testkit" % sprayV % "test",
"com.typesafe.akka" %% "akka-actor" % akkaV,
"com.typesafe.akka" %% "akka-testkit" % akkaV % "test",
// client side dependencies
"org.webjars" % "jquery" % "2.1.4",
"org.webjars" % "uikit" % "2.24.2"
)
}
lazy val root = (project.in(file("."))).enablePlugins(SbtWeb)
pipelineStages := Seq(uglify)
includeFilter in uglify := GlobFilter("js/*.js")
这是我的 ./target 文件夹的根目录:
resolution-cache/
scala-2.11/
streams/
没有 ./target/web
文件夹。有什么想法吗?
参考文献:
我会学习的。我使用的是 sbt-web 的旧版本。当我更新到最新时,它按预期工作。
教训是不要 copy/paste 像这样的片段:
addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.0.2")
来自网络。但是,而是通过以下方法之一手动查找最新版本:
- 如果 GitHub(等)页面有一个 "Build Passing" 标记,单击它导航到列出最新版本的构建服务器。
- 查看GitHub
中的分支
- 看看您是否可以导航到依赖项的存储库,例如 Maven Central,然后在那里浏览。我没有运气。我遇到的问题是我知道它不在 Maven 上,也不知道去哪里找。
在 SBT 中插入一些伪造的版本,并查看 SBT 尝试查看但失败的地方的输出:
[warn] module not found: com.typesafe.sbt#sbt-web;3.1.2
[warn] ==== typesafe-ivy-releases: tried
[warn] http://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbt/sbt-web/scala_2.10/sbt_0.13/3.1.2/ivys/ivy.xml
[warn] ==== sbt-plugin-releases: tried
[warn] http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-web/scala_2.10/sbt_0.13/3.1.2/ivys/ivy.xml
我确信有更好的方法可以找到我不知道的最新版本。比我更有经验的朋友请用更好的方式评论。
我正在使用 spray 创建单页应用程序,但无法让 sbt-web 处理我的任何输入。我从 WebJars 开始,因为 https://github.com/sbt/sbt-web/blob/master/README.md 说:
One last thing regarding the public and public-test folders... any WebJar depended on by the project will be automatically extracted into these folders e.g. target/web/public/lib/jquery/jquery.js.
但是,我在目标文件夹中没有看到这样的 "web" 文件夹。我想也许 WebJars 的例子太复杂了,所以我改为将 jquery.js 文件添加到资产文件夹的根目录,并设置 sbt-uglify 对其进行一些处理。然而,我仍然没有看到 SbtWeb 正在运行的证据。我已经 运行 sbt --debug clean run
并搜索了 SbtWeb 或 Uglify 的任何输出的输出,但没有错误或警告,也找不到任何关于 SbtWeb 或 Uglify 的内容。只是承认它似乎 "deduce" 插件:
[debug] deducing auto plugins based on known facts [debug] :: sorting:: found:
...
[debug] :: sorted deduced result: List(sbt.plugins.CorePlugin, com.typesafe.sbt.web.SbtWeb, com.typesafe.sbt.jse.SbtJsEngine, net.ground5hark.sbt.concat.SbtConcat, sbt.plugins.IvyPlugin, com.typesafe.sbt.jse.SbtJsTask, sbt.plugins.JvmPlugin, com.typesafe.sbt.uglify.SbtUglify, sbt.plugins.JUnitXmlReportPlugin)
这是我的目录结构:
./build.sbt
./project/plugins.sbt
./src/main/assets/js/jquery.js
./src/main/resources/html/uikit/login.html
./src/main/scala/Boot.scala
./src/main/scala/main.scala
这是我的 project/plugins.sbt:
resolvers += Resolver.sonatypeRepo("releases")
addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.0.2")
addSbtPlugin("net.ground5hark.sbt" % "sbt-concat" % "0.1.8")
addSbtPlugin("com.typesafe.sbt" % "sbt-uglify" % "1.0.3")
这是我的./build.sbt:
organization := "com.test123.spray"
version := "0.1"
scalaVersion := "2.11.6"
scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8")
libraryDependencies ++= {
val akkaV = "2.3.9"
val sprayV = "1.3.3"
Seq(
"io.spray" %% "spray-can" % sprayV,
"io.spray" %% "spray-routing" % sprayV,
"io.spray" %% "spray-testkit" % sprayV % "test",
"com.typesafe.akka" %% "akka-actor" % akkaV,
"com.typesafe.akka" %% "akka-testkit" % akkaV % "test",
// client side dependencies
"org.webjars" % "jquery" % "2.1.4",
"org.webjars" % "uikit" % "2.24.2"
)
}
lazy val root = (project.in(file("."))).enablePlugins(SbtWeb)
pipelineStages := Seq(uglify)
includeFilter in uglify := GlobFilter("js/*.js")
这是我的 ./target 文件夹的根目录:
resolution-cache/
scala-2.11/
streams/
没有 ./target/web
文件夹。有什么想法吗?
参考文献:
我会学习的。我使用的是 sbt-web 的旧版本。当我更新到最新时,它按预期工作。
教训是不要 copy/paste 像这样的片段:
addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.0.2")
来自网络。但是,而是通过以下方法之一手动查找最新版本:
- 如果 GitHub(等)页面有一个 "Build Passing" 标记,单击它导航到列出最新版本的构建服务器。
- 查看GitHub 中的分支
- 看看您是否可以导航到依赖项的存储库,例如 Maven Central,然后在那里浏览。我没有运气。我遇到的问题是我知道它不在 Maven 上,也不知道去哪里找。
在 SBT 中插入一些伪造的版本,并查看 SBT 尝试查看但失败的地方的输出:
[warn] module not found: com.typesafe.sbt#sbt-web;3.1.2 [warn] ==== typesafe-ivy-releases: tried [warn] http://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbt/sbt-web/scala_2.10/sbt_0.13/3.1.2/ivys/ivy.xml [warn] ==== sbt-plugin-releases: tried [warn] http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-web/scala_2.10/sbt_0.13/3.1.2/ivys/ivy.xml
我确信有更好的方法可以找到我不知道的最新版本。比我更有经验的朋友请用更好的方式评论。