【问题标题】:No mapping using babel and browserify in PlayFramework 2.5PlayFramework 2.5 中没有使用 babel 和 browserify 的映射
【发布时间】:2019-02-09 14:13:57
【问题描述】:

我正在编写一个基于 git@github.com:maximebourreau/play-reactjs-es6-seed.git 种子的项目

它似乎适用于 2.3 播放框架,但使用 2.5 框架时出现错误。

当我尝试加载页面时,出现以下错误:

RuntimeException:/path/to/root/target/web/browserify/main.js 没有映射

完整的堆栈跟踪位于消息的底部。

这是 browserify 正在编写的文件,但 play 似乎不知道如何将其映射到 URL。我找不到任何说明文件应写入何处或如何添加新映射的内容。我也很乐意使用插件进行翻译。

我应该在哪里写入文件,或者我应该如何告诉 play 如何映射文件?

我的 build.sbt 是

name := """myProject"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava)


scalaVersion := "2.11.7"

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
)

val browserifyTask = taskKey[Seq[File]]("Run browserify")

val browserifyOutputDir = settingKey[File]("Browserify output directory")

browserifyOutputDir := target.value / "web" / "browserify"

browserifyTask := {
  println("Running browserify");
  val outputFile = browserifyOutputDir.value / "main.js"
  browserifyOutputDir.value.mkdirs
  "./node_modules/.bin/browserify -t [ babelify --presets [ es2015 react ] ] app/assets/javascripts/main.jsx -o "+outputFile.getPath !;
  List(outputFile)
}

sourceGenerators in Assets <+= browserifyTask

resourceDirectories in Assets += browserifyOutputDir.value

我的路线文件是

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# An example controller showing a sample home page
GET     /                           controllers.HomeController.index
# An example controller showing how to use dependency injection
GET     /count                      controllers.CountController.count

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.versioned(path="/public", file: Asset)


POST    /assessment                 controllers.AsyncController.assessment

#
# Play can't find files in node_modules in 2.5+
#GET     /node_modules/*file         controllers.NodeModulesController.at(file)
#GET     /node_modules/*file         controllers.NodeModulesController.at(file: String)
GET     /node_modules/*file         controllers.NodeModulesController.versioned(file: String)
#GET     /node_modules/*file         controllers.Assets.versioned(path="/node_modules", file:Asset)

堆栈跟踪是

 scala.sys.package$.error(package.scala:27)
 sbt.Mapper$$anonfun$fail$1.apply(PathMapper.scala:37)
 sbt.Mapper$$anonfun$fail$1.apply(PathMapper.scala:37)
 sbt.Alternatives$$anon$1$$anonfun$$bar$1$$anonfun$apply$3.apply(PathMapper.scala:117)
 sbt.Alternatives$$anon$1$$anonfun$$bar$1$$anonfun$apply$3.apply(PathMapper.scala:117)
 scala.Option.orElse(Option.scala:257)
 sbt.Alternatives$$anon$1$$anonfun$$bar$1.apply(PathMapper.scala:117)
 sbt.Alternatives$$anon$1$$anonfun$$bar$1.apply(PathMapper.scala:117)
 sbt.PathFinder$$anonfun$pair$1.apply(Path.scala:135)
 sbt.PathFinder$$anonfun$pair$1.apply(Path.scala:135)
 scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
 scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
 scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
 scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
 scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
 scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
 sbt.PathFinder.pair(Path.scala:135)
 com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9$$anonfun$10$$anonfun$apply$4.apply(SbtJsTask.scala:292)
 com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9$$anonfun$10$$anonfun$apply$4.apply(SbtJsTask.scala:286)
 com.typesafe.sbt.web.SbtWeb$.withActorRefFactory(SbtWeb.scala:595)
 com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9$$anonfun$10.apply(SbtJsTask.scala:285)
 com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9$$anonfun$10.apply(SbtJsTask.scala:284)
 scala.collection.immutable.Stream$$anonfun$map$1.apply(Stream.scala:376)
 scala.collection.immutable.Stream$$anonfun$map$1.apply(Stream.scala:376)
 scala.collection.immutable.Stream$Cons.tail(Stream.scala:1085)
 scala.collection.immutable.Stream$Cons.tail(Stream.scala:1077)
 scala.collection.immutable.Stream.foldLeft(Stream.scala:563)
 scala.concurrent.Future$.sequence(Future.scala:491)
 com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9.apply(SbtJsTask.scala:303)
 com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1$$anonfun$9.apply(SbtJsTask.scala:272)
 com.typesafe.sbt.web.incremental.package$.syncIncremental(package.scala:228)
 com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1.apply(SbtJsTask.scala:271)
 com.typesafe.sbt.jse.SbtJsTask$$anonfun$jsSourceFileTask$1.apply(SbtJsTask.scala:257)
 scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
 sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
 sbt.std.Transform$$anon$4.work(System.scala:63)
 sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
 sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
 sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
 sbt.Execute.work(Execute.scala:237)
 sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
 sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
 sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
 sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
 java.util.concurrent.FutureTask.run(FutureTask.java:266)
 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
 java.util.concurrent.FutureTask.run(FutureTask.java:266)
 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 嘿,您有机会解决这个问题吗?我也有同样的。

标签: browserify babeljs playframework-2.5


【解决方案1】:

您必须在 build.sbt 中更改两行

List(outputFile)  to Nil
and
resourceDirectories in Asset += browserifyOutputDir.value
to
unmanagedResources in Assets += baseDirectory.value / "target/web/browserify/main.js"

例如:

browserifyTask := {
  println("Running browserify");
  val outputFile = browserifyOutputDir.value / "main.js"
  browserifyOutputDir.value.mkdirs
  "./node_modules/.bin/browserify -t [ babelify --presets [ es2015 react ] ] app/assets/javascripts/main.jsx -o "+outputFile.getPath !;
  Nil
}

sourceGenerators in Assets <+= browserifyTask
unmanagedResources in Assets += baseDirectory.value / "target/web/browserify/main.js"

【讨论】:

    【解决方案2】:

    我遇到了相同的错误消息,几乎相同的堆栈跟踪, 从同一个 git repo 启动项目后:git@github.com:maximebourreau/play-reactjs-es6-seed.git

    最新版本的 repo 使用 play 2.5 并且工作正常,所以 我不认为play版有问题。

    我注意到错误在某处提到 [sbt-jshint], 并从project/plugins.sbt 中删除这一行为我解决了这个问题:

    addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3")
    

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多