feat
migrate userscript loader
from
- assuming legacy global IIFE userscript and dependency
// foo.user.js
@require https://legacy-global-iife-cdn/bar
@require https://legacy-global-iife-cdn/baz
legacy global IIFE
to
- assuming modern ESM userscript and dependency
// foo.user.mjs
// like vscode extension `import vscode from 'vscode``
import { gm } from 'https://modern-esm-cdn/@xxx-monkey/runtime'
// `importShim` if impl is using shim mode
import { importShim } from 'https://modern-esm-cdn/@xxx-monkey/runtime'
import bar from 'https://modern-esm-cdn/bar'
import baz from 'https://modern-esm-cdn/baz'
// or like https://developers.cloudflare.com/dynamic-workers/api-reference/
// export default { fetch }
export default { userscript }
// or like vscode extesion style
// export { activate, deactivate }
export { userscript }
Maybe impl using
modules
There are many JS modules.
- ESM: import/export
- CJS: require
- legacy: window/globalThis/self/...
- UMD
- AMD
- SystemJS
library
-
Since 2021, famous dev sindresorhus move all his 1K+ packages to ESM only, see The ESM move sindresorhus/meta#15
-
In 2026, popular library I known are ALL written ESM format.
-
In 2026, ZERO popular library I known is written CJS format, or legacy global IIFE format, ...
CDN
Many CDN support ESM
frontend
<script type="module" src="module.js"></script>
import pkg from 'https://url/pkg'
-
Since maybe 2018, firefox maybe v60, support ESM
-
Since maybe 2017, chrome maybe v61, support ESM
backend
import pkg from 'pkg'
import pkg from 'https://url/pkg'
-
Since maybe 2018, deno born, support ESM
-
Since maybe 2021, bun born, support ESM
embed
- Since maybe 2020, quickjs born, support ESM
editor
userscript
- AFAIK, non userscript loader assuming ESM and support ESM yet.
workaround/polyfill/shim
related
FR matrix in lines ascending order
greasemonkey/greasemonkey#3229
#2791
violentmonkey/violentmonkey#2528
upstream
https://connect.mozilla.org/t5/ideas/enable-consuming-of-es-modules-in-content-scripts-and/idi-p/125953
feat
migrate userscript loader
from
to
Maybe impl using
or import shim https://github.com/guybedford/es-module-shims
or faster rust bundler https://github.com/rolldown/rolldown, like vite, see https://v7.vite.dev/guide/rolldown
modules
There are many JS modules.
library
Since 2021, famous dev sindresorhus move all his 1K+ packages to ESM only, see The ESM move sindresorhus/meta#15
In 2026, popular library I known are ALL written ESM format.
In 2026, ZERO popular library I known is written CJS format, or legacy global IIFE format, ...
CDN
Many CDN support ESM
Since 2020,
import XXX from 'https://esm.sh/{{pkg}}', see https://github.com/esm-dev/esm.shSince 2020,
import XXX from 'https://cdn.jsdelivr.net/npm/{{pkg}}/+esm', see Introducing esm.run - A New-Age CDN for JavaScript modules jsdelivr/jsdelivr#18263Since 2020,
import XXX from 'https://cdn.skypack.dev/{{pkg}}', see https://github.com/skypackjs/skypack-cdnfrontend
<script type="module" src="module.js"></script>import pkg from 'https://url/pkg'Since maybe 2018, firefox maybe v60, support ESM
Since maybe 2017, chrome maybe v61, support ESM
backend
import pkg from 'pkg'import pkg from 'https://url/pkg'Since maybe 2018, deno born, support ESM
Since maybe 2021, bun born, support ESM
embed
editor
userscript
workaround/polyfill/shim
guybedford/es-module-shimsbring ESM to non-ESM environment, see https://github.com/guybedford/es-module-shimsrelated
FR matrix in lines ascending order
greasemonkey/greasemonkey#3229
#2791
violentmonkey/violentmonkey#2528
upstream
https://connect.mozilla.org/t5/ideas/enable-consuming-of-es-modules-in-content-scripts-and/idi-p/125953