代码之家  ›  专栏  ›  技术社区  ›  aknuds1

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

  •  2
  • aknuds1  · 技术社区  · 10 年前

    我在我的PlayFramework2.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.jss有多个匹配项:

    <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?

    1 回复  |  直到 10 年前
        1
  •  5
  •   James Ward    10 年前

    事实上有两种情况 react.js 在WebJar中。因此,如果您想使用定位器,则需要更具体地了解路径。之前 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播放 版本 2.3.0-3 那么您可以使用现在内置的 WebJarAssets.fullPath 方法:

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