Recibo el siguiente error cuando quiero iniciar mi proyecto mecanografiado vue 3:
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:\Projects\backify-ui\documentation\node_modules\@vue\cli-service\lib\util\loadFileConfig.js:28:7) Este error ocurre desde que cambié el nombre de mi vue.config.js a vue.config.mjs . Lo curioso es que este proyecto funciona a través de gitpod.io pero no en phpstorm y vscode.
Mi 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(); }, };Eso en realidad es un error.
Mira, usan la función import() en una cadena, que es el resultado de la llamada path.resolve() . Como ya habrás notado, la función import() solo funciona con las URL file:// y data:// , pero path.resolve() solo devuelve una ruta absoluta (no una URL), que en el entorno de Windows generalmente comienza con el nombre del disco local (p. ej., C: ).
Mi problema es que mi versión de Node.js es demasiado baja. Actualizar a Node.js 16 resolvió el problema.
¡He encontrado una posible solución!
Como señala @Dima Parzhitsky, esto parece ser un error en Vue. La parte de Vue que contiene ese error es el cargador del archivo de configuración vue.config.js (o .mjs / .cjs ). Sin embargo, Vue en realidad ofrece otra opción, puede mover la configuración a un bloque "vue":{ ... } dentro de package.json .
Sin embargo, según Vue Docs , esto lo limitará solo a valores compatibles con json y dado que su configuración usa funciones, esta podría no ser una opción para usted (a menos que pueda encontrar una manera de lograr el mismo resultado de una manera compatible con json) )
Sin embargo, para aquellos que ven esto y tienen valores compatibles con json, aquí hay un ejemplo de mi propio proyecto para que sepan cómo debería verse:
vue.config.js original (asegúrese de eliminar este archivo):
module.exports = { pluginOptions: { electronBuilder: { mainProcessFile: 'src/main/background.js', rendererProcessFile: 'src/renderer/main.js', externals:['node-pty'], }, }, css: { loaderOptions: { sass: { additionalData: `@import "@/renderer/assets/globals.scss";` } } } }; movido dentro package.json :
"vue": { "pluginOptions": { "electronBuilder": { "mainProcessFile": "src/main/background.js", "rendererProcessFile": "src/renderer/main.js", "externals":["node-pty"] } }, "css": { "loaderOptions": { "sass": { "additionalData": "@import '@/renderer/assets/globals.scss';" } } } }Todo parece ser un error con la configuración actual de vue cli y la versión de node.js. Para obtener más información, consulte el comentario de @Dima Parzhitsky y @Zhang Buzz.
La mejor solución para mí fue simplemente usar @vue/cli@5.0.0-beta.7 en combinación con el nodo v16.12.0 .
También uso un vue.config.mjs en lugar de vue.config.js
Otra solución podría ser mover todo al paquete.json, más sobre esto en el comentario de @James Batchelor (pero no lo probé)
Tuve un problema similar pero con el administrador de procesos del nodo pm2. Estoy tratando de ejecutar una aplicación nodejs en modo clúster, pero siempre termina con el mismo código de error [ERR_UNSUPPORTED_ESM_URL_SCHEME] . Esta publicación es el resultado principal de Google al buscar mi problema, por lo que dejar mi método para resolverlo podría ser útil para alguien.
La solución es instalar Windows Subsystem for Linux (WSL)
Esto le permite ejecutar nodejs en Linux, donde se puede evitar el error anterior ya que el esquema de URL se aceptaría allí. Observe el mensaje de error: Only file and data URLs are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'