I get the following error when i want to start my vue 3 typescript project:
ERROR Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:' Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:' at new NodeError (node:internal/errors:371:5) at defaultResolve (node:internal/modules/esm/resolve:1016:11) at ESMLoader.resolve (node:internal/modules/esm/loader:422:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:222:40) at ESMLoader.import (node:internal/modules/esm/loader:276:22) at importModuleDynamically (node:internal/modules/cjs/loader:1041:29) at importModuleDynamicallyWrapper (node:internal/vm/module:437:21) at importModuleDynamically (node:vm:381:46) at importModuleDynamicallyCallback (node:internal/process/esm_loader:35:14) at loadFileConfig (C:Projectsbackify-uidocumentationnode_modules@vuecli-servicelibutilloadFileConfig.js:28:7)
This error occurs since I renamed my vue.config.js
to vue.config.mjs
. The funny thing is that this project works via gitpod.io but not in phpstorm and vscode.
My vue.config.mjs:
import rehypeHighlight from "rehype-highlight"; export default { chainWebpack: (config) => { config.module .rule("mdx") .test(/.mdx?$/) .use("babel-loader") .loader("babel-loader") .options({ plugins: ["@vue/babel-plugin-jsx"] /* Other options… */ }) .end() .use("@mdx-js/loader") .loader("@mdx-js/loader") .options({ jsx: true, rehypePlugins: [rehypeHighlight] /* otherOptions… */, }) .end(); }, };
Answer
The whole thing seems to be a bug with the current vue cli configuration and node.js version. For more info check out the comment from @Dima Parzhitsky and @Zhang Buzz.
The best workaround for me was to simply use the @vue/cli@5.0.0-beta.7
in combination with node v16.12.0
.
Also i use a vue.config.mjs
instead of vue.config.js
Another solution could be to move the whole thing into the package.json, more about this in the comment of @James Batchelor (but i didn’t test it)