scala.js - 从 NPM 包中导入资产
问题描述
假设我想在我的 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 文件夹中吗?还是我必须使用另一个命令?
解决方案
除了您的配置之外,您还必须将以下设置添加到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/
目录。
推荐阅读
- xamarin.forms - Xamarin iOS build error - Native linking failed (Link Framework SDKs Only)
- django - 对于 nginx,我是在为这个 url https://localhost:3000 监听端口 443 还是端口 3000?
- c# - AnimationPlayer animations do not play in Godot
- ionic-framework - ionic cordova run android - Ionic 4 命令卡住
- c++ - 提升 Asio 同步 https 调用
- java - 自定义 Nifi 处理器抛出构建错误:来自 Nifi nar maven 插件的空指针异常
- material-ui - Material Ui KeyboardDatepicker - 月份显示无效值
- python - 如何在熊猫中将多个条件放在一起?
- java - Requesting two datetimes out of a table, but only getting one
- automation - Best way to track defects from Automation testing and manual testing separately in JIRA?