如何解决“无法解决‘@/...’中的导入”问题?

mah*_*toz 12 javascript typescript vue.js vite vitest

这是我得到的错误。我在“vite.config.ts”文件中定义的文件路径有问题。你能帮助我吗?

错误日志

错误信息:

FAIL  tests/utils/ConvertFromDomainToCountryCode.test.ts [ tests/utils/ConvertFromDomainToCountryCode.test.ts ]
Error: Failed to resolve import "@/constant" from "src/assets/ts/_utils/ConvertFromDomainToCountryCode.ts". Does the file exist?
Run Code Online (Sandbox Code Playgroud)

ConvertFromDomainToCountryCode.test.ts文件

import { describe, expect } from "vitest";
import { SetFlags } from "../../src/assets/ts/_utils/ConvertFromDomainToCountryCode.ts";

describe("Convert From Domain To CountryCode", () => {
  test("function defined", () => {
    expect(SetFlags).toBeDefined();
  });
});
Run Code Online (Sandbox Code Playgroud)

当我设置文件路径“../../../constant/index”时,它工作正常。

ConvertFromDomainToCountryCode.ts文件

import { COUNTRY_INFO } from "@/constant";
Run Code Online (Sandbox Code Playgroud)

这里我添加了“别名”

vite.config.ts文件

import { fileURLToPath, URL } from "node:url";

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve, dirname } from "node:path";
import vueJsx from "@vitejs/plugin-vue-jsx";

export default defineConfig({
  plugins: [
    vue(),
    vueJsx()
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url))
    }
  },
  base: "/"
});
Run Code Online (Sandbox Code Playgroud)

系统

OS: macOS 13.2.1
CPU: (8) arm64 Apple M1 Pro
Memory: 91.50 MB / 16.00 GB
Shell: 5.8.1 - /bin/zsh
Binaries:
Node: 16.18.1 - ~/.nvm/versions/node/v16.18.1/bin/node
Yarn: 1.22.19 - ~/.nvm/versions/node/v16.18.1/bin/yarn
npm: 8.19.2 - ~/.nvm/versions/node/v16.18.1/bin/npm
Browsers:
Chrome: 111.0.5563.64
Safari: 16.3
npmPackages:
@vitejs/plugin-vue: ^3.1.2 => 3.2.0
@vitejs/plugin-vue-jsx: ^3.0.0 => 3.0.0
@vitest/coverage-istanbul: ^0.29.3 => 0.29.3
vite: ^3.1.8 => 3.2.5
vitest: ^0.29.3 => 0.29.3
Run Code Online (Sandbox Code Playgroud)

只是等待找到文件的路径

mah*_*toz 19

我解决了这个错误。我在文件中添加此代码vitest.config.ts

resolve: {
  alias: [{ find: "@", replacement: resolve(__dirname, "./src") }]
}
Run Code Online (Sandbox Code Playgroud)

  • @AmirRezvani`从'节点:路径'导入{resolve}` (5认同)

小智 5

有同样的问题,答案有助于解决它,但我想添加你可以从路径导入解析

import { resolve } from 'path'
Run Code Online (Sandbox Code Playgroud)

如果您尚未声明,@tsconfig您有某些特定文件夹的动态路径,则可以指定它们。

resolve: {
  alias: [{ 
    find: "@server", 
    replacement: resolve(__dirname, './src/server/') 
  }]
}
Run Code Online (Sandbox Code Playgroud)