Quando ho scoperto WebJars alcuni mesi fa ero super-scettico sul fatto che sarebbe stato un modo valido per gestire le dipendenze lato client data l'enorme complessità di alcuni di questi build/buildsystems, e data la frequenza dei file js
sono pubblicati La seconda preoccupazione ovviamente non è stata fondata, ma mi sento confermata per la prima volta dopo aver trascorso quasi 36 ore cercando invano di ottenere circa 10 scss/css/less
-type webJars e 8 JS webJars per vivere sotto un tetto jsDependencies
.In una versione sbt di ScalaJs, c'è qualche vantaggio nell'usare webjars invece di npm o bower con 'Provided'?
Quello che ho trovato, come che per il momento si raggiunge JS dipendenza 3, 4, o 5, è iniziare a ricevere in un ciclo timekill ridicolo:
1. "Oh nos fastOptJS fallito perché c'era un po 'di file casuale! anche questo è stato identificato come una dipendenza nel 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. So cosa fare! Aggiungerò una versione al js definito!
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. "Oh no! FastOptJS non riuscito!"
[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 ragazzi.
Questo va più e più e intorno e intorno, e poi devo iniziare a fare
lazy val bs_sidebar = ("org.webjars" % "bootstrap-sidebar" % version.bs_sidebar intransitive())/"js/sidebar.js" dependsOn(s"bootstrap.js", s"bootstrap.min.js")
e ora io non sono davvero anche utilizzando il webjar, ma ha un js dipendenza chiamato X e non posso cambiare la situazione ...
domanda
Hmmm? Cosa succede se ho appena fatto ciò che ero solito fare, ma costruire le dipendenze senza l'app in un file gigantesco, o un insieme di file, e poi inserirli nella compilazione? Ho una prova di concetto da online e l'ho fatta funzionare (penso che fosse https://github.com/wav/material-ui-scalajs-react/blob/master/src/main/scala/wav/web/muiwrapper/package.scala) che ha quasi funzionato, e mi ha dato l'idea.
So npm
funziona molto meglio di sbt,
e posso ancora ottenere nel mio pacchetto ... qual è il rovescio della medaglia, e mi sto perdendo qualcosa su sbt?
In che modo si adatta [lo scalajs-bundler] (http://get-scala.org/blog/2016/10/19/scalajs-bundler.html)? Andando avanti, o per applicazioni non banali, è necessario migrare da jsDependencies a npmDependencies? – Grogs
Si prevede che la maggior parte delle build complesse alla fine si spostino verso qualcosa di più basato su 'jsDependencies'. 'npmDependencies' è sicuramente un'opzione. – sjrd