【问题标题】:ScalaJS to simply redirect complication output to specified directoryScalaJS 简单地将复杂输出重定向到指定目录
【发布时间】:2016-09-04 18:28:24
【问题描述】:

通过 Scala.js 的 sbt fastOptJS,我只想将 myproject/target/scala-2.11/web-fastopt.js 重定向到 myproject/js 这可能吗?

web-jsdeps.js 相同 - 将其重定向到 /myproject/libs

我读过这个 Scala.js compilation destination

这似乎太复杂了。我只有一个项目,没有两三个,没有播放框架,只是普通的文件到文件夹的副本。

更新: 我的设置,project/BuildProject.scala

 lazy val chromePluginProject = Project(id = "chromePlugin", base = file(".")).enablePlugins(ScalaJSPlugin).

settings(

 version      := "0.1",
 scalaVersion := Versions.scala,

 artifactPath in(Compile, fastOptJS) := baseDirectory.value / "plugin" / "src" / "content" / "fastOpt.js",


  ivyScala := ivyScala.value map { _.copy(overrideScalaVersion = true) }, // TODO:

 //mainClass := Some("branch.ScalaJsSample"),

 libraryDependencies ++= scalaJsDependencies,

 libraryDependencies += "be.doeraene" %%% "scalajs-jquery" % "0.9.0",
 libraryDependencies += "com.lihaoyi" %%% "upickle" % Versions.upickle,

 libraryDependencies += "com.lihaoyi" %%% "scalatags" % Versions.scalaTags,

 // we will not use use DOM directly so commenting it
 libraryDependencies += "org.scala-js" %%% "scalajs-dom" % Versions.dom,


 jsDependencies += "org.webjars" % "jquery" % Versions.jquery / "jquery.js",
 jsDependencies += "org.webjars.bower" % "webcomponents.js" % Versions.webcomponents / "webcomponents-lite.js",

  // After reloading and rerunning fastOptJS,
  // this will create scala-js-jsdeps.js
 skip in packageJSDependencies := false,

 // allows DOM be available from from console' run (so no "ReferenceError:  "window" is not defined." error would appear)
 jsDependencies += RuntimeDOM, // it will use PhantomJS, basically

 scalaJSUseRhino in Global := false //will use node.js to run the thing

)

我的文件结构是: <root>/plugin/src/content 我要复制fastOpt.js的地方

正如我所说,它在 /target/scala-2.11/ 中的 *-site-jsdeps.js 中创建

【问题讨论】:

    标签: scala sbt scala.js


    【解决方案1】:

    是的,你可以这样做:

     artifactPath in(Compile, packageScalaJSLauncher) := baseDirectory.value / ".." / "jvm" / "webapp" / "js" / "launcher.js", 
     artifactPath in(Compile, fastOptJS) := baseDirectory.value / ".." / "jvm" / "webapp" / "js" / "fastOpt.js", 
    artifactPath in(Compile, fullOptJS) := baseDirectory.value / ".." / "jvm" / "webapp" / "js" / "fullOpt.js", 
     artifactPath in(Compile, packageJSDependencies) := baseDirectory.value / ".." / "jvm" / "webapp" / "js" / "dependency.js" 

    更多可以参考https://github.com/yuanqingfei/gdbscan-akka-d3js/blob/master/build.sbt

    【讨论】:

    • 我想如果我使用crossProject,一切都会奏效,在我的情况下,我只使用一个项目,js 一个:lazy val myChromePluginProject = Project(id = "my-project", base = file(".")).enablePlugins(ScalaJSPlugin). settings( artifactPath in(Compile, fastOptJS) := baseDirectory.value / "plugin" / "src" / "content" / "fastOpt.js", ...它不会复制更新我的问题。
    • 这似乎不适用于 Scala.js 1.3(无跨项目),至少不适用于 fastLinkJS
    【解决方案2】:

    只需使用这个 sbt 设置:

    crossTarget in fastOptJS := baseDirectory.value / "js"
    

    【讨论】:

    • 似乎现在对我有用,我试图把它放在 .settings(..) 或项目之外。我也试过这个:stackoverflow.com/questions/27505957/… 尽管还有两个项目。
    • crossTarget in (Compile, fastOptJS) 那么呢?
    【解决方案3】:

    在您的BuildProject.scala (object BuildProject extends Build {) 或build.sbt 中添加此行:

    lazy val copyJsTask = TaskKey[Unit]("copyJsTask", "Copy javascript files to target directory")
    
      lazy val myPluginProject = Project(id = "my-plugin", base = file(".")).
    
        settings(
    
         copyJsTask := {
            val outDir = baseDirectory.value / "plugin/src/content"
            val inDir = baseDirectory.value / "target/scala-2.11"
            val files = Seq("my-plugin-fastopt.js", "my-plugin-fastopt.js.map") map { p =>   (inDir / p, outDir / p) }
            IO.copy(files, overwrite = true)
         }, ..
    

    在项目的根目录中添加新文件 .sbtrc

    内容:

    alias jsCompile=;fastOptJS;copyJsTask
    

    --

    这让我对它的“复杂性”感到满意,npm/grunt/linux 批处理。

    【讨论】:

      【解决方案4】:

      使用 sbt v1.6.1,您可以添加这些设置来更改 Scala.js 的输出目录。

       settings(
              Compile / fastOptJS / artifactPath := baseDirectory.value / "../where-you-like/main.js",
              Compile / fullOptJS / artifactPath := baseDirectory.value / "../where-you-like/main.js",
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        • 2012-01-29
        相关资源
        最近更新 更多