几个月前,当我第一次发现webJars时,我非常怀疑这将是处理客户端依赖项的一种可行方法,因为其中某些构建/构建系统非常复杂,并且js文件的发布频率很高。第二个问题当然没有充分根据,但是我花了将近36个小时徒劳地尝试让大约10个scss/css/less类型的webJars和8个JS webJars生活在一个jsDependencies屋顶下,但第一次感到平反。

我发现,当您达到JS依赖3、4或5时,您开始陷入一个荒谬的timekill循环:

1.“哦,不!fastOptJS失败,因为有一个随机文件也被命名为与webjar中的依赖项相同的文件!”

[trace] Stack trace suppressed: run last client/compile:resolvedJSDependencies for the full output.
[error] (client/compile:resolvedJSDependencies) org.scalajs.core.tools.jsdep.JSLibResolveException: Some references to JS libraries could not be resolved:
[error] - Ambiguous reference to a JS library: bootstrap.min.js
[error]   Possible paths found on the classpath:
[error]   - META-INF/resources/webjars/bootstrap/3.3.6/js/bootstrap.min.js
[error]   - META-INF/resources/webjars/bootstrap3-dialog/1.34.4/examples/assets/bootstrap/js/bootstrap.min.js
[error]   originating from: client:compile, client:compile, client:compile, client:compile
[error] - Ambiguous reference to a JS library: bootstrap.js
[error]   Possible paths found on the classpath:
[error]   - META-INF/resources/webjars/bootstrap3-dialog/1.34.4/examples/assets/bootstrap/js/bootstrap.js
[error]   - META-INF/resources/webjars/bootstrap/3.3.6/js/bootstrap.js
[error]   originating from: client:compile, client:compile, client:compile, client:compile

2.我知道该怎么办!我将向已定义的js添加一个版本!
lazy val           webjarbs   =   "org.webjars"               %    "bootstrap"                       % version.bootstrap  / s"${version.bootstrap}/bootstrap.js"                      minified s"${version.bootstrap}/bootstrap.min.js"         dependsOn    "jquery.js" commonJSName  "bootstrap"

3.“哦,不!fastOptJS失败了!”
[trace] Stack trace suppressed: run last client/compile:resolvedJSDependencies for the full output.
[error] (client/compile:resolvedJSDependencies) org.scalajs.core.tools.jsdep.JSLibResolveException: Some references to JS libraries could not be resolved:
[error] - Missing JS library: 3.3.6/bootstrap.js
[error]   originating from: client:compile, client:compile, client:compile, client:compile
[error] - Missing JS library: 3.3.6/bootstrap.min.js
[error]   originating from: client:compile, client:compile, client:compile, client:compile

gg男孩。

这样一遍又一遍又一遍又一遍,然后我必须开始做
lazy val         bs_sidebar   = ( "org.webjars"               %    "bootstrap-sidebar"              % version.bs_sidebar intransitive())  / "js/sidebar.js" dependsOn(s"bootstrap.js",  s"bootstrap.min.js")

现在我什至没有真正使用webjar,但是它有一个名为X的 js 依赖项,我无法更改...

问题

嗯?如果我只是做以前的事情,但是在没有应用程序的情况下将依赖项构建到一些巨大的文件或文件集中,然后将其输入到构建中,该怎么办?我从网上获得了一个概念证明,并且我认为它行之有效(我认为这是https://github.com/wav/material-ui-scalajs-react/blob/master/src/main/scala/wav/web/muiwrapper/package.scala),几乎可以起作用,并且给了我这个主意。

我知道npmsbt,更好用,我仍然可以将其放入我的包中……有什么缺点,而我是否缺少有关sbt 的东西?

最佳答案

我同意你的看法。一旦应用程序开始对JavaScript库具有非平凡的依赖关系,jsDependencies就不会扩展。这主要是因为WebJars缺少关键功能(就像传递依赖项一样),还因为jsDependencies并非旨在扩展的机制。

随着时间的流逝,用户要求jsDependencies的功能越来越多,因为他们希望将其用作其真正的应用程序规模(无论意味着什么)依赖机制。结果,我们在jsDependencies上修补了越来越多的功能/漏洞。结果不是世界上最漂亮的东西,它肯定有缺点。

我实际上会鼓励使用npm来解决您的依赖关系,尤其是如果您熟悉它并且知道如何将其集成到您的工作流中。

09-25 20:07