标题重写为:将"Integrating Server-Side Rendering with scalajs-react"翻译成中文为"将scalajs-react与服务器端渲染集成"
P粉155551728
P粉155551728 2023-08-30 10:58:29
[React讨论组]

我一直在尝试按照scalajs-react中集成服务器端渲染的指南,但我的堆栈可能有些不同,所以不是那么直观。

我正在使用SBT 1.5.5scala 2.12.10以及以下相关插件:

addSbtPlugin("com.typesafe.play"  % "sbt-plugin"                    % "2.7.4")
  addSbtPlugin("org.scala-js"       % "sbt-scalajs"                   % "1.7.0")
  addSbtPlugin("org.scala-js"       % "sbt-jsdependencies"            % "1.0.2")
  addSbtPlugin("ch.epfl.scala"      % "sbt-scalajs-bundler"           % "0.20.0")
  addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0")
  addSbtPlugin("org.scala-native"   % "sbt-scala-native"              % "0.3.7")
  addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject"      % "1.2.0")
  addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "1.2.0")

在文章的第2步中,它说要将以下内容添加到'build.sbt'文件中:

val scalaGraalVer = "1.0.1"

  lazy val webappSsr = crossProject("webapp-ssr")

  lazy val webappSsrJs = webappSsr.js
    .dependsOn(myScalaJsWebapp) // 将此处更改为您真正的SJS模块名称
    .settings(
      libraryDependencies ++= Seq(
        "com.github.japgolly.scala-graal" %%% "core-js"       % scalaGraalVer,
        "com.github.japgolly.scala-graal" %%% "ext-boopickle" % scalaGraalVer
      ),
      scalaJSLinkerConfig ~= { _.withSourceMap(false) },
      artifactPath in (Compile, fastOptJS) := (crossTarget.value / "webapp-ssr.js"),
      artifactPath in (Compile, fullOptJS) := (crossTarget.value / "webapp-ssr.js")
    )

  lazy val webappSsrJvm = webappSsr.jvm
    .settings(
      libraryDependencies ++= Seq(
        "com.github.japgolly.scala-graal" %% "core"          % scalaGraalVer,
        "com.github.japgolly.scala-graal" %% "core-js"       % scalaGraalVer,
        "com.github.japgolly.scala-graal" %% "ext-boopickle" % scalaGraalVer
      ),
      unmanagedResources in Compile += Def.taskDyn {
        val stage = (scalaJSStage in Compile in webappSsrJs).value
        val task = stageKey(stage)
        Def.task((task in Compile in webappSsrJs).value.data)
      }.value)
    )

所以我目前在这里有2个问题:

  1. crossProject似乎不接受String作为参数,即:

    def crossProject(平台:sbtcrossproject.Platform*)

  2. val task = stageKey(stage)处 - stageKey不是一个被识别的函数。我在网上搜索过,但无法弄清楚它的位置,因此不知道我缺少什么或是否有其他方法。

P粉155551728
P粉155551728

全部回复(1)
P粉378890106

就像@tdimoff已经说过的那样,sbtcrossproject库的crossProject方法不接受字符串参数,所以这行代码lazy val webappSsr = crossProject("webapp-ssr")应该替换为lazy val webappSsr = crossProject(JSPlatform, JVMPlatform)

关于stageKey函数,它似乎是scalajs-bundler库的一部分,所以您需要添加以下库依赖:

libraryDependencies += "ch.epfl.scala" % "scalajs-bundler" % "0.20.0"

这样应该可以使用stageKey函数。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号