sbt-jsdependencies is not particularly recommended for new projects. Most projects should use
scalajs-bundler instead, which provides saner dependencies through
npm. Advantages of
- 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 0.6.x, the
jsDependencies sbt setting is part of the core distribution.
Add the following line to
addSbtPlugin("org.scala-js" % "sbt-jsdependencies" % "1.0.1")
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"
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.