Play Framework 2.3.4:如何将JSHint作为编译任务的一部分运行

时间:2014-09-07 07:36:37

标签: playframework sbt jshint

我有一个多项目应用程序,我想让JSHint作为编译任务的一部分运行。以下是我配置项目的方式:

1)将JSHint插件添加到myApp/project/plugins.sbt

...

addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.1")

2)在myApp/build.sbt

中启用它(SbtWeb)
...

lazy val apidocs = project.in(file("modules/apidocs")).enablePlugins(play.PlayScala, SbtWeb).settings(
  javaOptions in Test += "-Dconfig.resource=apidocs-application.conf"
).dependsOn(
  common % "test->test;compile->compile"
)

我也试过运行assets任务......但看起来JSHint没有被调用。如何让JSHint作为编译任务的一部分运行?也许更好的选择是修改myApp/projects/Build.scala并让JSHint压缩任何子项目中的任何*.js

2 个答案:

答案 0 :(得分:1)

首先,我假设你正在使用this version of sbt-jshint(似乎至少有3个流行的版本浮动)。

这样做的一般要点是我们需要有一个由编译触发的任务。这很容易适应this answer。因此,我们将以下内容添加到build.sbt

val triggeredTask = taskKey[Seq[sbt.File]]("Triggered by compile")

triggeredTask <<= Def.task {
  JshintKeys.jshint.value
}.triggeredBy(compile in Compile)

这里要注意的是taskKey类型不是我链接的答案的单位,而是jshint任务的类型。这里要注意的第二件事是引用jshint的奇怪之处。 JshintKeys.jshint与仅调用jshint相对。在我这样做之前,我一直收到“错误:找不到:值jshint”。如果查看source,您会看到JshintKeys是对象内的对象。我不知道这是否是编写sbt插件的标准,但我知道这是必要的。最后,.value是我们说我们触发的任务依赖于另一个任务的方式。

一旦你有了这个,你应该看到编译步骤触发jshint:)

答案 1 :(得分:0)

JShint不会压缩任何内容,它会检测并警告JavaScripts中的错误做法。

从插件的文档(和源代码)来看,似乎并不是自动运行linting任务,它只是提供任务&#34; jshint&#34;您可以在sbt控制台中调用以获取jshint结果输出。

你有可能将它与项目的编译任务集成在一起,以便在有linting警告时让它失败,但是不能告诉你从头顶到底是怎么回事,我会建议你成为更好的朋友与sbt想出那一个。 (http://www.scala-sbt.org/0.13/tutorial/index.html