【问题标题】:Play Framework 2.3.4: How to Run JSHint as a Part of the Compile TaskPlay Framework 2.3.4:如何在编译任务中运行 JSHint
【发布时间】:2014-09-07 07:36:36
【问题描述】:

我有一个多项目应用程序,我想让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

【问题讨论】:

    标签: playframework sbt jshint


    【解决方案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 :)

    【讨论】:

      【解决方案2】:

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

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

      您可能可以将它与您的项目的编译任务集成,以在出现 linting 警告时使其失败,但我无法告诉您确切的方法,但我建议您成为更好的朋友用 sbt 来解决这个问题。 (http://www.scala-sbt.org/0.13/tutorial/index.html)

      【讨论】:

        猜你喜欢
        • 2013-12-30
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-22
        相关资源
        最近更新 更多