`Vue3 - Vite` 项目别名 src 到 @ 不工作
`Vue3 - Vite` project alias src to @ not working
我已经安装了 vue3 - vite
导入组件的项目,例如
import Component from '../../../../components/Component.vue'
我只想给 src 文件夹起个别名然后做
import Component from '@/components/Component.vue'
这是我的vite.config.js
import vue from '@vitejs/plugin-vue'
/**
* https://vitejs.dev/config/
* @type {import('vite').UserConfig}
*/
export default {
plugins: [
vue({
template: {
compilerOptions: {
// ...
}
}
})
]
}
我错过了什么吗?我还应该做什么?
与 webpack
不同,Vite
默认情况下没有 @
的别名 src
。在以下问题中对此进行了讨论:https://github.com/vitejs/vite/issues/279
最终你需要创建一个别名:
// vite.config.js
module.exports = {
alias: {
'/@': path.resolve(__dirname, './src')
}
}
// Your config
export default {
alias: {
'/@': path.resolve(__dirname, './src')
},
plugins: [ ... ]
}
那么你需要在你的文件中使用/@
,例如:
import foo from '/@foo'
在vite.config.js
文件中写入以下代码块
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
}
})
这是对我有用的...
import vue from '@vitejs/plugin-vue'
const path = require('path')
export default {
alias: {
'/@': path.resolve(__dirname, './src')
},
plugins: [vue()]
}
2022 年更新
此解决方案默认来自使用 npm init vue@latest
创建新项目时的默认解决方案
import { fileURLToPath, URL } from "url";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
});
在组件中使用 @/
:
<script setup>
import HelloWorld from "@/components/HelloWorld.vue";
</script>
这对我有用:
import path from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@/': `${path.resolve(__dirname, 'src')}/`
}
}
})
然后在组件中:
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="Hello Vue 3 + Vite" />
</template>
<script>
import HelloWorld from '@/components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
}
}
</script>
Vue 3 Vite 打字稿
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
}
})
使用 @/
删除警告并为下载添加提示
tsconfig.json
{
"compilerOptions": {
...
"paths": {
"@/*": ["./src/*", "./dist/*"]
}
}
}
Vote up people below too except answer of question creator please. He copy paste answer form person who helped him in same day he asked question.
在我的Vite 2.7.x
import vue from '@vitejs/plugin-vue'
import path from 'path'
...
...
resolve: {
alias: [
{ find: '@', replacement: path.resolve(__dirname, './src') },
{ find: '...', replacement: path.resolve(__dirname, '...') },
{ find: '...', replacement: path.resolve(__dirname, '...') },
{ find: '...', replacement: path.resolve(__dirname, '...') },
]
}
我尝试了上面的大部分解决方案,不幸的是没有奏效。以下是。
在我的jsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}
在我的 vite.config.js
import { fileURLToPath } from "url";
import path from "path";
import { defineConfig } from "vite";
export default defineConfig({
resolve: {
alias: {
"@": path.resolve(path.dirname(fileURLToPath(import.meta.url)), "src"),
},
},
});
导出路径解析函数
问题
@/
别名在:src
动态属性中不起作用,无法动态解析资源文件路径。
解决方案
- 在普通的ts代码中,使用
import.meta.url
定义路径解析函数(即img()
)。
- 在vue脚本中使用
img()
。
文件
/src
/assets/img/
logo.png
Util.ts
App.vue
Util.ts
export const srcRoot = import.meta.url;
export function img(name:string){
return new URL(`./assets/img/${name}.png`, srcRoot)
}
App.vue
<script>
import {img} from "./Util";
</script>
<template>
<img :src="img('logo')" />
</template>
我已经安装了 vue3 - vite
导入组件的项目,例如
import Component from '../../../../components/Component.vue'
我只想给 src 文件夹起个别名然后做
import Component from '@/components/Component.vue'
这是我的vite.config.js
import vue from '@vitejs/plugin-vue'
/**
* https://vitejs.dev/config/
* @type {import('vite').UserConfig}
*/
export default {
plugins: [
vue({
template: {
compilerOptions: {
// ...
}
}
})
]
}
我错过了什么吗?我还应该做什么?
与 webpack
不同,Vite
默认情况下没有 @
的别名 src
。在以下问题中对此进行了讨论:https://github.com/vitejs/vite/issues/279
最终你需要创建一个别名:
// vite.config.js
module.exports = {
alias: {
'/@': path.resolve(__dirname, './src')
}
}
// Your config
export default {
alias: {
'/@': path.resolve(__dirname, './src')
},
plugins: [ ... ]
}
那么你需要在你的文件中使用/@
,例如:
import foo from '/@foo'
在vite.config.js
文件中写入以下代码块
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
}
})
这是对我有用的...
import vue from '@vitejs/plugin-vue'
const path = require('path')
export default {
alias: {
'/@': path.resolve(__dirname, './src')
},
plugins: [vue()]
}
2022 年更新
此解决方案默认来自使用 npm init vue@latest
import { fileURLToPath, URL } from "url";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
});
在组件中使用 @/
:
<script setup>
import HelloWorld from "@/components/HelloWorld.vue";
</script>
这对我有用:
import path from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@/': `${path.resolve(__dirname, 'src')}/`
}
}
})
然后在组件中:
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="Hello Vue 3 + Vite" />
</template>
<script>
import HelloWorld from '@/components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
}
}
</script>
Vue 3 Vite 打字稿
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
}
})
使用 @/
tsconfig.json
{
"compilerOptions": {
...
"paths": {
"@/*": ["./src/*", "./dist/*"]
}
}
}
Vote up people below too except answer of question creator please. He copy paste answer form person who helped him in same day he asked question.
在我的Vite 2.7.x
import vue from '@vitejs/plugin-vue'
import path from 'path'
...
...
resolve: {
alias: [
{ find: '@', replacement: path.resolve(__dirname, './src') },
{ find: '...', replacement: path.resolve(__dirname, '...') },
{ find: '...', replacement: path.resolve(__dirname, '...') },
{ find: '...', replacement: path.resolve(__dirname, '...') },
]
}
我尝试了上面的大部分解决方案,不幸的是没有奏效。以下是。
在我的jsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}
在我的 vite.config.js
import { fileURLToPath } from "url";
import path from "path";
import { defineConfig } from "vite";
export default defineConfig({
resolve: {
alias: {
"@": path.resolve(path.dirname(fileURLToPath(import.meta.url)), "src"),
},
},
});
导出路径解析函数
问题
@/
别名在:src
动态属性中不起作用,无法动态解析资源文件路径。
解决方案
- 在普通的ts代码中,使用
import.meta.url
定义路径解析函数(即img()
)。 - 在vue脚本中使用
img()
。
文件
/src
/assets/img/
logo.png
Util.ts
App.vue
Util.ts
export const srcRoot = import.meta.url;
export function img(name:string){
return new URL(`./assets/img/${name}.png`, srcRoot)
}
App.vue
<script>
import {img} from "./Util";
</script>
<template>
<img :src="img('logo')" />
</template>