我有一个多项目应用程序,我想让JSHint
作为编译任务的一部分运行。以下是我配置项目的方式:
1)将JSHint插件添加到myApp/project/plugins.sbt
:
...
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.1")
2)在myApp/build.sbt
:
...
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
。
答案 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)