タイトルは次のように書き換えられます。「サーバーサイド レンダリングと scalajs-react の統合」は中国語に翻訳され、「scalajs-react とサーバーサイド レンダリングの統合」となります。
P粉155551728
2023-08-30 10:58:29
<p>サーバー側レンダリングを scalajs-react に統合するためのガイドに従おうとしていますが、私のスタックは少し異なる可能性があるため、それほど直感的ではありません。</p>
<p>私たちは現在<code>SBT 1.5.5</code>、<code>scala 2.12.10</code>および以下の関連コンポーネント:</p>を使用しています。
<pre class="brush:php;toolbar:false;">addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.7.4")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.7.0")
addSbtPlugin("org.scala-js" % "sbt-jsdependency" % "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")</pre>
<p>文章第 2 行の「build.sbt」文に以下の内容を追加する必要があります。
<pre class="brush:php;toolbar:false;">val scalaGraalVer = "1.0.1"
遅延 val webappSsr =crossProject("webapp-ssr")
遅延 val webappSsrJs = webappSsr.js
.dependsOn(myScalaJsWebapp) // ここを真正の SJS モジュール名に変更します
。設定(
libraryDependency = Seq(
「com.github.japgolly.scala-graal」 %%% "コア-js" % scalaGraalVer,
「com.github.japgolly.scala-graal」 %%% "ext-boopickle" % スカラグラールVer
)、
scalaJSLinkerConfig ~= { _.withSourceMap(false) }、
artifactPath in (コンパイル、fastOptJS) := (crossTarget.value / "webapp-ssr.js")、
artifactPath (コンパイル、fullOptJS) := (crossTarget.value / "webapp-ssr.js")
)
遅延 val webappSsrJvm = webappSsr.jvm
。設定(
libraryDependency = 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 = Def.taskDyn {
val stage = (webappSsrJs でのコンパイルでの scalaJSStage).value
val タスク = stageKey(ステージ)
Def.task((webappSsrJs のコンパイルのタスク).value.data)
}。価値)
)</pre>
<p>それでは現在 2 つの質問があります: </p>
<ol>
<li><p><code>crossProject</code> は、<code>String</code> をパラメータとして受け入れないようです。つまり、</p>
<p><code>defcrossProject(プラットフォーム: sbtcrossproject.Platform*)</code></p>
</li>
<li><p>At <code>val task = stageKey(stage)</code> - <code>stageKey</code> は認識される関数ではありません。オンラインで検索しましたが、場所がわからないので、何が足りないのか、それとも別の方法があるのかわかりません。 </p>
</li>
</ol></p>
@tdimoff がすでに述べたように、sbtcrossproject ライブラリの
crossProject
メソッドは文字列パラメータを受け入れないため、このコード行lazy val webappSsr =crossProject(" webapp -ssr")
はlazy val webappSsr =crossProject(JSPlatform, JVMPlatform)
に置き換える必要があります。stageKey
関数に関しては、scalajs-bundler ライブラリの一部であると思われるため、次のライブラリの依存関係を追加する必要があります。libraryDependency = "ch.epfl.scala" % "scalajs-bundler" % "0.20.0"
これにより、stageKey
関数が使用できるようになります。