4

我对 sbt/play 配置不是很熟悉。我正在使用 play 2.3.8 为我的 javascript 应用程序提供服务。在项目中有:

.enablePlugins(SbtWeb)
.enablePlugins(play.PlayScala)
.settings(
  ...
  libraryDependencies ++= WebDependancies :+ evobufAkka,
  pipelineStages in Assets := Seq(closure, digest),
  ...
  // Some closure compiler settings
)

该项目正在使用闭包编译器来缩小代码等。但我想改变它。我想停止使用闭包编译器,而只使用简单的 npm 包。我知道 sbt 可以运行一些 shell 任务。这样做的原因是将服务器与前端分开,因此与前端相关的所有任务(例如(less、uglify、指纹等)实际上都是由 node.js 等 JavaScript 工具完成的。我正在阅读有关 sbt-web 的信息,但如果可能的话,我想避免这种情况。我想到的是: 1. 启动 sbt,打开我的项目 2. 运行编译: - sbt 将运行我的 npm 任务,最终生成一些 build.js 文件,然后可以通过 /public 目录或其他任何内容的播放框架提供服务。3. 如果可能的话,我希望有一个单独的单元测试过程。

在 npm 设置方面,我正在考虑将 package.json 放在我的project/public文件夹中,除非将它放在project/app/assets.

这一切都可能吗?

2015 年 8 月 8 日更新

我做了一些研究,发现了外部流程。基于我创建的一些示例:

lazy val npmBuildTask = taskKey[Unit]("Execute the npm build command to build the ui")

npmBuildTask := {
  "cd public/ && npm install" !
}  

但不确定如何将此任务添加到编译过程中?

4

1 回答 1

6

您可以使编译任务取决于您的 npmBuildTask 任务:

compile <<= (compile in Compile) dependsOn npmBuildTask

于 2015-08-09T11:12:45.180 回答