scalacenter / scaladex

The Scala Package Index
https://index.scala-lang.org
BSD 3-Clause "New" or "Revised" License
197 stars 76 forks source link

Scala CLI deps for Scala.js libraries #1333

Closed mbovel closed 8 months ago

mbovel commented 8 months ago

Current behavior

https://index.scala-lang.org/scala-js/scala-js-dom/artifacts/scalajs-dom/2.8.0 says I should write:

//> using dep "org.scala-js::scalajs-dom::2.8.0"

Which fails:

➜ scala-cli test .
Downloading 4 dependencies
[error] ./project.scala:5:16
[error] Error downloading org.scala-js:scalajs-dom_3:2.8.0
[error]   not found: /Users/mbovel/.ivy2/local/org.scala-js/scalajs-dom_3/2.8.0/ivys/ivy.xml
[error]   not found: https://repo1.maven.org/maven2/org/scala-js/scalajs-dom_3/2.8.0/scalajs-dom_3-2.8.0.pom
[error]   not found: /Users/mbovel/Library/Caches/ScalaCli/local-repo/1.1.2/org.scala-js/scalajs-dom_3/2.8.0/ivys/ivy.xml
[error]   No fallback URL found
[error] //> using dep "org.scala-js::scalajs-dom::2.8.0"
[error] 

Expected Behavior

The Scala CLI deps for Scala.js libraries shown on Scaladex should work.

The following works for me:

//> using dep org.scala-js::scalajs-dom_sjs1:2.8.0

Extra comments

Scala CLI version:

➜ scala-cli version
Scala CLI version: 1.1.2
Scala version (default): 3.3.1

Tried to mimic SBT's %%%, this also doesn't work (should it?):

//> using dep org.scala-js:::scalajs-dom:2.8.0

Search terms

Scala.js Scala CLI

bishabosha commented 8 months ago

this seems to be specifically a problem with the test scope in scala-cli, it works with the run command

mbovel commented 8 months ago

For me it also fails with compile or run:

➜  ~/scaladex-scalajs echo '//> using dep "org.scala-js::scalajs-dom::2.8.0"' > project.scala
➜  ~/scaladex-scalajs scala-cli compile project.scala                                       
Downloading 2 dependencies
[error] ./project.scala:1:16
[error] Error downloading org.scala-js:scalajs-dom_3:2.8.0
[error]   not found: /Users/mbovel/.ivy2/local/org.scala-js/scalajs-dom_3/2.8.0/ivys/ivy.xml
[error]   not found: https://repo1.maven.org/maven2/org/scala-js/scalajs-dom_3/2.8.0/scalajs-dom_3-2.8.0.pom
[error]   not found: /Users/mbovel/Library/Caches/ScalaCli/local-repo/1.1.2/org.scala-js/scalajs-dom_3/2.8.0/ivys/ivy.xml
[error]   No fallback URL found
[error] //> using dep "org.scala-js::scalajs-dom::2.8.0"
[error]
mbovel commented 8 months ago

Ah! Got the explanation from @sjrd; the first :: makes the dependency platform-dependent, and the platform is JVM by default, for which there is no scalajs-dom. I must use //> using platform "js":

//> using platform "js"
//> using dep "org.scala-js::scalajs-dom::2.8.0"

So the dependency shown by Scaladex is actually correct; no issue.

However, maybe Scaladex could prepend //> using platform "js" for libraries that are only built for Scala.js?