为什么我不能从 react-0.12.2 webjar 访问文件 react.js?

Why can't I access the file react.js from the react-0.12.2 webjar?

我在我的 Play Framework 2.3 项目中使用了 webjar react-0.12.2,我一直依赖它:

libraryDependencies ++= Seq(
  "org.webjars" %% "webjars-play" % "2.3.0-2",
  "org.webjars" % "react" % "0.12.2"
)

如果我尝试访问 'react.js',就像下面的示例一样,由于 react.js:

有多个匹配项,我会收到错误消息
<script type='text/javascript' src='@routes.WebJarAssets.at(WebJarAssets.locate("react.js"))'>

错误:

MultipleMatchesException: Multiple matches found for react.js. Please provide a more specific path, for example by including a version number.

我发现访问 'react.min.js' 反而有效,所以 'react.js' 路径有问题。但是为什么会出错,有bug吗?

WebJar 中实际上有两个 react.js 实例。因此,如果您想使用定位器,则需要更具体地说明路径。在 webjars-play 版本 2.3.0-3 之前,没有单一的方法调用方式来执行此操作,因此您可以执行以下操作之一:

使用 Play 2.3 的资产管道并通过提取目录访问文件:

<script type='text/javascript' src='@routes.Assets.at("lib/react/react.js")'>

或者您可以创建一个辅助方法,例如:

def fullPath(webjar: String, path: String): String = {
  val version = webJarAssetLocator.getWebJars.get(webjar)
  s"$webjar/$version/$path"
}

可以这样使用:

<script type='text/javascript' src='@routes.WebJarAssets.at(fullPath("react", "react.js"))'>

或者如果您升级到 webjars-play 版本 2.3.0-3 那么您可以使用现在内置的 WebJarAssets.fullPath 方法:

<script type='text/javascript' src='@routes.WebJarAssets.at(WebJarAssets.fullPath("react", "react.js"))'>