Using ES Modules in your Browser Extension's Service Worker
When developing a browser extension — in this case a Chrome extension — we may begin developing using the same ES Modules approach we’ve used in the frontend, but then are presented with an error along the lines of Cannot use 'import.meta' outside a module
.
In the following diff we can use the JSON schema to find a type
property we can use to specify the service worker is an ES Module. Note, $schema
is not actually a valid manifest property and will throw a warning upon loading the extension, however in instances like this it is helpful.
{
"$schema": "https://json.schemastore.org/chrome-manifest",
"name": "My super cool extension",
"description": "",
"version": "0.1",
"manifest_version": 3,
"background": {
"service_worker": "worker.js",
+ "type": "module"
},
"action": {
"default_popup": "index.html"
}
}
Now add the following to the worker.js
file:
console.log("import.meta.url is", import.meta.url)
And finally after loading the extension we can view the value of import.meta.url
without error.