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

时间:2015-02-05 15:28:03

标签: playframework reactjs playframework-2.3 webjars

我在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'路径存在问题。但为什么会出错,是否有错误?

1 个答案:

答案 0 :(得分:5)

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

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

<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"))'>