在运行fastOptJS :: startWebpackDevServer时,以本地路径为前缀的源地图URL上的scalajs-bundler阻塞,例如“ ./http ...”源文件

Zac*_*bia 5 sbt scala.js webpack scalajs-bundler

我有一个ScalaJS项目,fastOptJS::startWebpackDevServer在Windows 10中运行sbt命令会产生以下代码段所示的错误:

[error] (Emitted value instead of an instance of Error) Cannot find source file 'https://raw.githubusercontent.com/japgolly/scalacss/v0.5.3/js/src/main/scala/scalacss/defaults/PlatformExports.scala': Error: Can't resolve './https://raw.githubusercontent.com/japgolly/scalacss/v0.5.3/js/src/main/scala/scalacss/defaults/PlatformExports.scala' in '/project/root/target/scala-2.12/scalajs-bundler/main'
[error]  @ multi (webpack)-dev-server/client?http://localhost:8080 ./mockup-fastopt.js
[error] WARNING in ./mockup-fastopt.js
[error] (Emitted value instead of an instance of Error) Cannot find source file 'https://raw.githubusercontent.com/japgolly/scalacss/v0.5.3/js/src/main/scala/scalacss/internal/Platform.scala': Error: Can't resolve './https://raw.githubusercontent.com/japgolly/scalacss/v0.5.3/js/src/main/scala/scalacss/internal/Platform.scala' in '/project/root/target/scala-2.12/scalajs-bundler/main'
[error]  @ multi (webpack)-dev-server/client?http://localhost:8080 ./mockup-fastopt.js
[error] WARNING in ./mockup-fastopt.js
[error] (Emitted value instead of an instance of Error) Cannot find source file 'https://raw.githubusercontent.com/japgolly/scalacss/v0.5.3/js/src/main/scala/scalacss/internal/mutable/Mutex.scala': Error: Can't resolve './https://raw.githubusercontent.com/japgolly/scalacss/v0.5.3/js/src/main/scala/scalacss/internal/mutable/Mutex.scala' in '/project/root/target/scala-2.12/scalajs-bundler/main'
[error]  @ multi (webpack)-dev-server/client?http://localhost:8080 ./mockup-fastopt.js
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为它试图从当前目录解析URL,如本部分所述: Error: Can't resolve './https://raw.githubusercontent.com/scala/scala/v2.12.4/src/library/scala/util/control/Breaks.scala'

我也尝试过运行fastOptJS::webpack,它会产生警告而不是错误。

这是我的build.sbt文件:

import sbt.Keys._

lazy val root: Project = (project in file("."))
  .settings(
    name := Settings.name,
    version := Settings.version,
    scalaVersion := Settings.versions.scala,
    libraryDependencies ++= Settings.scalaJsDependencies.value,
    skip in packageJSDependencies := false,
    npmDependencies in Compile ++= Settings.npmDependencies.value,
    scalaJSUseMainModuleInitializer := true,
    scalaJSUseMainModuleInitializer.in(Test) := false,
    webpackBundlingMode := BundlingMode.Application
  )
  .enablePlugins(ScalaJSPlugin, WorkbenchPlugin, ScalaJSBundlerPlugin)
Run Code Online (Sandbox Code Playgroud)

和Settings.scala文件:

import sbt._
import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._

object Settings {

  val name = """mockup"""
  val version = "0.0.0"

  object versions {
    val materialUi = "0.19.4"
    val react = "16.1.1"
    val scala = "2.12.4"
    val scalaCSS = "0.5.3"
    val scalaJsDom = "0.9.2"
    val scalaJsReact = "1.1.1"
    val scalaJsReactComponents = "1.0.0-M1"
  }

  val npmDependencies = Def.setting(Seq(
    "material-ui" -> versions.materialUi,
    "react" -> versions.react,
    "react-dom" -> versions.react
  ))

  val scalaJsDependencies = Def.setting(
    "org.scala-js"                      %%% "scalajs-dom"              % versions.scalaJsDom             ::
    "com.github.japgolly.scalacss"      %%% "core"                     % versions.scalaCSS               ::
    "com.github.japgolly.scalacss"      %%% "ext-react"                % versions.scalaCSS               ::
    "com.github.japgolly.scalajs-react" %%% "core"                     % versions.scalaJsReact           ::
    "com.github.japgolly.scalajs-react" %%% "extra"                    % versions.scalaJsReact           ::
    "com.olvind"                        %%% "scalajs-react-components" % versions.scalaJsReactComponents ::
    Nil
  )
}
Run Code Online (Sandbox Code Playgroud)

更新1:更改标题,并放置到相关问题的链接。原来,这个问题是webpack的错误。

更新2:要解决运行时的错误fastOptJS::startWebpackDevServer,只需通过添加emitSourceMaps := false到build.sbt中来停止使用源映射。没有源映射很烂,但是对我来说至少比没有快速的增量构建要好。