Announcing Scala.js 0.6.20
Sep 1, 2017.
We are pleased to announce the release of Scala.js 0.6.20!
This release is mostly intended to bridge the gap between the 0.6.x and 1.x branches, to make it easier to cross-compile and/or migrate.
Read on for more details.
Getting started
If you are new to Scala.js, head over to the tutorial.
Release notes
If upgrading from Scala.js 0.6.14 or earlier, make sure to read the release notes of 0.6.15, which contain important migration information.
As a minor release, 0.6.20 is backward source and binary compatible with previous releases in the 0.6.x series. Libraries compiled with earlier versions can be used with 0.6.20 without change. 0.6.20 is also forward binary compatible with 0.6.{17-19}, but not with earlier releases: libraries compiled with 0.6.20 cannot be used by projects using 0.6.{0-16}.
Please report any issues on GitHub.
Breaking changes
sbt 0.13.16 or above is required (or sbt 1.x)
The sbt plugin of Scala.js 0.6.20 starts using features of sbt 0.13.16. If you are using an older version of sbt 0.13.x, you will have to upgrade to 0.13.16 or later.
Since 0.6.19, Scala.js also supports sbt 1.0.0+.
scalajs-env-selenium
has to be upgraded to 0.2.0
Scala.js 0.6.20 contains internal changes to improve the so-called test adapter, which is the mechanism used by sbt to communicate with testing frameworks.
These changes are invisible to you, but they broke scalajs-env-selenium
0.1.x.
If you use it, you will have to upgrade it to 0.2.0.
Deprecations
Scala.js 0.6.20 introduces more aggressive deprecations for features that will disappear in 1.x. Note that those features have already had better replacements since Scala.js 0.6.18; we are just making it more obvious that these new features should be used to be compatible with 1.x.
@ScalaJSDefined
This annotation is now deprecated. Instead of using it, you should add the following to your project settings:
and remove the @ScalaJSDefined
annotations everywhere in your codebase.
The semantics of your codebase will be unchanged.
js.JSApp
js.JSApp
has traditionally provided two services to an object Foo
that extends it.
These two services are replaced by two different features.
Discoverability by sbt as main object
Since Scala.js 0.6.18, the sbt plugin can recognize “standard” main
methods of the form
in objects, even if they do not extend js.JSApp
.
Use such a main method to replace js.JSApp
in the context of discoverability by sbt.
To enable it as main method, make sure you also set
in your project settings.
Automatic export to JavaScript
Given
the object Foo
and its main
method are automatically exported such that JavaScript code can call
To achieve exactly the same behavior without js.JSApp
, define Foo
as
Alternatively, you can define it as
but in that case, the JavaScript code will have to be changed to
jsDependencies += RuntimeDOM
and requiresDOM := true
These settings will not be supported by sbt-jsdependencies
1.x, the new home of jsDependencies
and related features.
Instead of relying on them to configure a JS environment equipped with the DOM, you should explicitly do so. For example, to use Node.js with jsdom, use:
New features
Improved support for cross-compilation with 1.x and jsDependencies
The release notes of Scala.js 1.0.0-M1 detail how to cross-compile between 0.6.x and 1.x.
One aspect of it was particularly painful: handling the new JSDependenciesPlugin
.
Scala.js 0.6.20 makes this easier by introducing a shim of JSDependenciesPlugin
inside sbt-scalajs.
It is now sufficient to add the following to your project/plugins.sbt
:
and add enablePlugins(JSDependenciesPlugin)
to the projects that require it.
There is no need for the hacky project/JSDependenciesCompat.scala
anymore.
JDK APIs
The following JDK API class has been added:
java.util.SplittableRandom
Bug fixes
The following bugs have been fixed in 0.6.20:
- #3107
ByteArrayOutputStream
(and in general allCloseable
s) should be anAutoCloseable
- #3082 Incorrect handling of main generates broken code
You can find the full list on GitHub.