Version Control
Vals are immutable, but you can publish new versions of vals. Versions start at
0
and go up from there. When you reference a val, you always get the most
recent version. You can toggle which version you’re looking at via the dropdown
menu next to the val’s name.
Imports & pinning
Vals are imported via esm.town URLs. If you leave off the version number, it’s an unpinned import, and you’ll always get the latest version. If you include a version number, it’s a pinned import, and you’ll always get that version.
When you import one of your own vals, via the @
helper, it will be imported unpinned, so you will
automatically get all new changes. When you import another user’s val via @
,
it will pin your import to the most recent version of that val
(ie it will end it ?v=7
or whatever the current version number is),
so if they change it, you won’t get automatic updates.
This makes your code more stable and protects you against
code injection attacks. You can override this default behavior if you trust the
user not to break your code: remove the v
query param in the import statement,
and your code will always use the latest version of that val.
Versions of external imports
You can also specify versions of NPM modules by using an @
symbol:
We highly recommend pinning imported modules because their APIs can change between versions and unexpectedly break your code.