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

akn*_*ds1 2 playframework reactjs webjars playframework-2.3

我在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"
)
Run Code Online (Sandbox Code Playgroud)

如果我尝试访问'react.js',就像在下面的例子中一样,我得到一个错误,因为react.js有多个匹配:

<script type='text/javascript' src='@routes.WebJarAssets.at(WebJarAssets.locate("react.js"))'>
Run Code Online (Sandbox Code Playgroud)

错误:

MultipleMatchesException: Multiple matches found for react.js. Please provide a more specific path, for example by including a version number.
Run Code Online (Sandbox Code Playgroud)

我发现访问'react.min.js'代替了,所以'react.js'路径有问题.但为什么会出错,是否有错误?

Jam*_*ard 5

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

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

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

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

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

将使用如下:

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

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

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