0

假设我想在我的 web 应用程序中包含 font-awesome。所以我定义我的 build.sbt 如下:

val commonSettings = Seq(
    name := "repro",
    version := "1.0",
    scalaVersion := "2.12.8",
    unmanagedSourceDirectories in Compile +=
        baseDirectory.value / ".." / "shared" / "src" / "main" / "scala"
)
val client = project.in(file("client"))
    .settings(commonSettings: _*)
    .settings(
        npmDependencies in Compile ++= Seq(
            "font-awesome" -> "4.7.0",
        ),

    mainClass in Compile := Some("app.App"),

    scalaJSUseMainModuleInitializer := true,

    webpackBundlingMode := BundlingMode.LibraryOnly(),
)
.enablePlugins(ScalaJSPlugin)
.enablePlugins(ScalaJSBundlerPlugin)

val server = project.in(file("server"))
.settings(commonSettings: _*)
.settings(
    npmAssets ++= NpmAssets.ofProject(client) { nodeModules =>
        (nodeModules / "font-awesome").allPaths
    }.value
)
.enablePlugins(WebScalaJSBundlerPlugin)

我可以配置这个项目,以便我的“包”命令将 css 包含在我的 target/webapp 文件夹中吗?还是我必须使用另一个命令?

4

1 回答 1

0

除了您的配置之外,您还必须将以下设置添加到server项目中:

.settings(
    scalaJSProjects := Seq(client),
    pipelineStages in Assets := Seq(scalaJSPipeline),
    managedClasspath in Runtime += (packageBin in Assets).value,
    WebKeys.packagePrefix in Assets := "public/"
)

第一行介绍了server项目和项目产生的资产之间的依赖关系client。这些scalaJSProjects设置由sbt-web-scalajs插件引入。

第二行将项目产生的资产整合到sbt-webclient管理的 Web 资产中。

第三行告诉 sbt 将 sbt-web 插件生成的资产包含到服务器的类路径中。

最后一行是可选的,它只是将生成的资产放入public/资源目录中,这样它们就不会与其他不打算暴露给外界的类路径资源混在一起。

使用此配置,您可以使用以下命令构建生产资产:

> server/web-assets:package

或者,从构建文件中,通过使用packageBin in Assets任务。

这将生成一个target/scala-2.12/repro_2.12-1.0-web-assets.jar文件,其中包含 Webpack 在您的client项目中生成的 JavaScript 包以及font-awesome/目录。

于 2019-08-05T15:23:19.820 回答