问题标签 [sbt-web]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
78 浏览

elm - 如何在 sbt-web 中指定资产内依赖项?

为 Elm 语言开发了一个 sbt-web 插件,我将其用作本教程中的灵感sbt-stylus 插件

用法如下: 在assets/elm目录中可以放置一个 Elm 项目:即*.elm文件和elm-packages.json. Main.elm该插件只有在存在时才会编译,并生成一个Main.js. elm-make确保仅递归编译由Main.elm.

我遇到的问题是,如果我修改由 导入的模块之一Main.elm,新的编译Main.elm不会由sbt. 谁能告诉我如何将其他*.elm文件指定为依赖项Main.elm以触发编译?

请注意,我不想做类似的事情:

榆树制作 *.elm --output=Main.js

谢谢!

0 投票
2 回答
361 浏览

scala - 从 SBT Web 生成静态资产

我有一个基于 SBT-Web 和 Play Framework 的项目。好吧,Play 仅用于开发,然后(stage在 SBT/Activator 中运行命令时)所有内容都导出到静态页面并部署到一些可能甚至没有安装 Java 的网络服务器。

我目前的方法是添加一个resourceGenerator:

这现在有效,但它有一些缺点:

  • 首先,我不能使用子目录。当我尝试将文件放入子目录时,它被放入根目录。
  • 当我更改模板或源数据时,我必须重新加载项目以使其生效。
  • 最后,我会稍微感谢使用 Twirl 或类似的东西。

如何克服这些缺点?(第一个是最重要的。解决其他缺点是一个较小的好处。)

  • 我试图将生成代码放到管道阶段。这在构建最终工件时有效,但在开发期间不起作用。
  • 想法:使用 Twirl 模板,在开发过程中动态调用它,并在管道阶段以某种方式调用它(使用一些 ClassLoader 和反射 API)。我不确定这是否是正确的方法。我是否保证在执行 sbt-web 管道阶段时已经编译了 Scala/Twirl 代码?
  • 一个 hacky 想法:生成文件到项目根目录,在开发模式下通过路由动态服务它们,在管道阶段重命名它们。这是一个沉重的黑客攻击,但理论上它应该可以工作。
0 投票
0 回答
505 浏览

playframework - 在 Play 应用程序中使用 npm

来自Play 2.3 迁移指南

通过在项目的根目录中声明 package.json 文件,可以使用 npm 和 WebJars。npm 包中的资源被提取到与 WebJars 相同的 lib 文件夹中,因此,从代码的角度来看,无需担心资源是来自 WebJar 还是来自 npm 包。

我在较新的文档中找不到关于使用 npm 的任何其他内容。从提到的依赖项中com.typesafe.npm,我只能找到使用 Scala 2.10 编译的版本:

两者都不适用于 Play 2.5。是否有使用 Scala 2.11 编译的较新版本,或者不再使用/支持 npm。

0 投票
0 回答
63 浏览

scala - Sbt 解析器在应用名称上不包含 scala 版本

目前我在使用 sbt 解析器查找我的项目时遇到问题。

我目前正在将我的项目发布到

我在 publishSettings 中设置了 crossPaths := false

然而,这是我的解析器

但它试图在这里寻找我发布的项目

有没有办法让解析器有某种crossPath = false?或摆脱应用程序名称末尾的scala版本“_2.11”的方法?

0 投票
1 回答
103 浏览

playframework - 从 SBT 二进制分发中排除 Elm 源文件

我将 Elm 集成插件用于 Scala/Play 项目,称为sbt-elm,并与 Play Framework 结合使用。

我注意到,除了命令elmMain.js生成的文件之外elm-make,所有 .elm 源文件都在target/web/public/main/elm目录中。我不确定这是否是预期的行为;可能是 SbtWeb 管道的正常运行;但这确实意味着最终的二进制发行版包含运行时实际上不需要的 Elm 源代码。

为了优化我的应用程序的部署,我想从分发工件中排除 Elm 源文件。

我是否应该寻找一种方法来防止将 .elm 文件复制到target/web/public/main directory; 或者寻找一种方法来防止 .elm 文件被打包到分发工件中?我该怎么做?

非常感谢您的关注,以及您可能提供的任何指导。

0 投票
0 回答
42 浏览

playframework - 运行 `stage` 和 `run` 时使用不同的 sbt-web SettingKey 值

我正在写一个 SBT 插件。在插件中,我有:

val prod = SettingKey[Boolean]("prod", "This will minify stuffs.")

build.sbt使用此插件的项目中,我想在运行时设置不同的值sbt stagesbt run.

我尝试了许多不同的组合,但它们都不起作用(例如prod in Assets in stage := true)。

我想知道是否有人知道如何解决这个问题。这似乎是一个正常的问题,应该可以通过范围界定轻松解决,但我不太了解 SBT 的范围。

如果您有一个关于在运行不同命令时如何覆盖 SettingKey 的小示例,那就太好了。谢谢你。

0 投票
0 回答
254 浏览

scala - 尝试在 sbt-web 中为 prod 和 dev 使用不同的 pipelineStages

我有一个使用 Play Framework 2.3 的项目,并且在整个资产管道中如何处理 JS 文件时遇到了一些问题。我想根据应用程序是在开发模式还是产品模式下启动以不同方式处理我的 JS 源文件。具体来说,我不想在 dev 模式下运行调用的管道阶段,而是在阶段transpile和prod模式下运行。watchtranspileuglify

正如预期的那样,我已经设置了全局管道阶段,pipelineStages := Seq(transpile, uglify)并且仅在 prod 模式下运行。

现在,对于开发模式,我已经将它设置为pipelineStages in Assets := Seq(transpile, watch)适用于开发,但我的问题是它也在 prod 模式下运行。watch只需要在开发模式下运行。

我还没有找到很多关于这方面的好信息,Play 文档甚至没有提到pipelineStages in Assetssbt-web自述文件只是顺便提到了它。除此之外,我只找到了一堆博客文章。根据我的阅读,我得到了pipelineStages in Assets开发模式独有的印象,但这种假设显然是不正确的。

我知道playRunHooks这对于开发人员专有的东西意味着什么,但是我不能为此使用它,因为它在配置完成后运行,因此不能用于有条件地配置管道阶段。
我目前针对这个问题的极其难看的解决方法是,我在其中设置了一个系统属性,playRunHooks并在管道阶段有一个包装器watch,当它被调用时会检查这个属性。

那么是否有任何适当的方法可以为我的 sbt-web 构建指定“仅限开发”管道阶段?任何建议,将不胜感激。

(我们也在迁移到 Play Framework 2.6 的过程中,以防万一这给了我更多的可能性)

0 投票
1 回答
75 浏览

scala - 未找到 Spring Boot + Scala.js 客户端资源

我想组合 Java/Scala sbt 子项目,使每个模块都是一个独立的 SPA 微服务。由于历史原因,我受限于 Spring Boot (Tomcat) 来提供文件。我选择 Scala.js 来编写 Javascript 客户端。打包是在 sbt 插件的帮助下完成的。相关部分build.sbt是:

当我展开生成的应用程序 zip 时universal:packageBin,在 lib 目录下,我可以找到com.iservport.iservport-cargo-1.1.1.RELEASE.jar(模块),并且:

我测试了 Spring Boot 服务 webjars 的能力,例如 d3.js,我看到它工作正常。但是,对于我的 jar 中的类似资源,我看不到相同的 webjar 映射工作:

我尝试过localhost:8443/webjars/iservport-control/1.1.1.RELEASE/iservport-cargo-opt.jslocalhost:8443/webjars/iservport-control /iservport-cargo-opt.js其他变体,它们都是 404。

如何将上述内容公开iservport-cargo-opt.js给客户?

0 投票
0 回答
9 浏览

playframework - 如何及时处理我的托管资产?

你能帮我把我的托管资源添加到资产目标目录吗?

当我在我的 sbt 项目中运行 web-assets:assets 时,我的自动插件会生成一些 .css 和 .map 文件,但它不会立即将这些生成的资产添加到 web/public/main 目录中。只有当我再次运行 web-assets:assets 时,资产才会添加到 web/public/main 目录中。

为什么在第一遍时没有将资产添加到 web/public/main 目录中,对此我有什么办法吗?

非常感谢您对这个问题的关注。