在sbt中运行npm build for play框架

时间:2015-08-07 11:10:25

标签: javascript playframework npm sbt sbt-web

我对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任务。所有这一切的原因是将服务器与前端分开,因此所有与前端相关的任务(较少,uglify,指纹识别等)实际上都是由类似节点的javascript工具完成的。我正在阅读关于sbt-web但我想尽可能避免这种情况。我的想法是: 1.开始sbt,打开我的项目 2.运行编译:   - sbt将运行我的npm任务,最终得到一些build.js文件,然后可以通过/ public目录中的play框架或其他任何方式提供。 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" !
}  

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

1 个答案:

答案 0 :(得分:6)

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

compile <<= (compile in Compile) dependsOn npmBuildTask