首页 前端知识 Vue编译报错 “Failed to resolve import “@/router“ from “src\main.js“. Does the file exist ? “ 问题修复

Vue编译报错 “Failed to resolve import “@/router“ from “src\main.js“. Does the file exist ? “ 问题修复

2024-07-29 00:07:18 前端知识 前端哥 637 670 我要收藏

前言

通过解决一个Vue编译报错,我们将学习构建工具中关于解析(resolve)别名(alias)的选项

背景

前端项目使用@简化import文件路径,编译打包时遇到报错 "Failed to resolve import “@/router” from “src\main.js”. Does the file exist ? "
在这里插入图片描述

解决方案

检查构建工具的配置文件 vite.config.js ,确保别名 @ 映射到src目录

alias:

resolve.alias
类型:Record<string, string> | Array<{ find: string | RegExp, replacement: string }>
将会被传递到 @rollup/plugin-alias 作为 entries 的选项。也可以是一个对象,或一个 { find, replacement } 的数组。

当使用文件系统路径的别名时,请始终使用绝对路径。相对路径的别名值会原封不动地被使用,因此无法被正常解析。

通过定义别名,可以在导入语句中使用简短的别名代替长路径,提高代码可读性和可维护性

// vite.config.js
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'

export default defineConfig(({ command, mode }) => {
	return {
		resolve: {
			alias: {
				'@': fileURLToPath(new URL('./src', import.meta.url))
			}
		}
	}
})

了解几个前置知识:

URL

new URL(input[,base])

该方法新建一个URL实例,便于对URL进行解析

参数:
input:string类型,input URL,要解析的绝对或相对URL
base:string类型,base URL,当input是绝对URL,base将被忽略。当input是相对URL,则解析base。如果base不是字符串,则首先将其转换为字符串。

fileURLToPath

url.fileURLToPath( url )

参数:
该函数接受单个参数:要解析的URL对象或字符串

返回值:返回一个经完全解析的符合特定平台的文件路径的字符串。

import.meta.url

import.meta.url 表示浏览器中模块的绝对URL或Node.js中的绝对路径(前缀为file:// )
import.meta 是给JavaScript模块暴露特定上下文的元数据属性的对象,它包含了这个模块的信息。import.meta 对象是由ECMAScript实现的,它带有一个null的原型对象。这个对象可以扩展,并且它的属性都是可写,可配置和可枚举的。

示例
这里有一个 my-module.js 模块

<script type="module" src="my-module.mjs"></script>

可以通过 import.meta 对象获取这个模块的元数据信息

console.log(import.meta); // { url: "file:///home/user/my-module.mjs" }

它返回一个带有url属性的对象,指明该模块的基本URL。也可以是外部脚本的URL,还可以是内联脚本所属文档的URL

转载请注明出处或者链接地址:https://www.qianduange.cn//article/14537.html
标签
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!