Dependencies are based on WebJars.
sbt-jsdependencies is not particularly recommended for new projects.
Most projects should use
scalajs-bundler instead, which provides saner dependencies through
- Support for transitive dependencies through npm
- Smart bundling with webpack
- Support for CommonJS modules in Scala.js
- No ambiguity issues related to the same .js file being present several times on the classpath
This repository contains
sbt-jsdependencies for Scala.js 1.x. In Scala.js
jsDependencies sbt setting is part of the core distribution.
Add the following line to
addSbtPlugin("org.scala-js" % "sbt-jsdependencies" % "1.0.2")
and enable the following plugin on Scala.js projects where you need
You can write the following in the
settings of those projects:
jsDependencies += "org.webjars" % "jquery" % "2.1.4" / "2.1.4/jquery.js"
This will make your project depend on the respective WebJar and include a file named
**/2.1.4/jquery.js in the said WebJar when your project is run or tested.
We are trying to make the semantics of "include" to be as close as possible to writing:
jsDependencies and associated metadata (e.g. for ordering) are persisted in a file (called
JS_DEPENDENCIES) and shipped with the artifact your project publishes.
For example, if you depend on the
scalajs-jquery package for Scala.js, you do not need to explicitly depend or include
jquery.js; this mechanism does it for you.
Scoping to a Configuration
You may scope
jsDependencies on a given configuration, just like for normal
jsDependencies += "org.webjars" % "jquery" % "2.1.4" / "jquery.js" % "test"
When they do so, you have to specify explicitly the name under which they are exported in a CommonJS environment (such as Node.js), otherwise they won't work when executed in Node.js.
This is the purpose of the
commonJSName directive, to be used like this:
jsDependencies += "org.webjars" % "mustachejs" % "0.8.2" / "mustache.js" commonJSName "Mustache"
which essentially translates to a prelude
var Mustache = require("mustache.js");
when running with Node.js from sbt (with
jsDependencies += "org.webjars" % "jasmine" % "1.3.1" / "jasmine-html.js" dependsOn "jasmine.js"
Note that the dependee must be declared as explicit dependency elsewhere, but not necessarily in this project (for example in a project the current project depends on).
jsDependencies += ProvidedJS / "myJSLibrary.js"
This will look for
myJSLibrary.js in the resources and include it.
It is an error if it doesn't exist.
You may use ordering and scoping if you need.
Write a Dependency File
skip in packageJSDependencies := false
in your project settings. The resulting file in the target folder will have the suffix
See the Scaladoc for other configuration options.