Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vite: resolve.alias - how to resolve paths?

What can resolve.alias do? It doesn't resolve the path below:

// vite.config.js
import { defineConfig } from 'vite'
import path from 'path'

export default defineConfig({
  resolve: {
    alias: {
      '@': path.resolve(__dirname, '/src'),
    },
  }
})

In my HTML:

<img src="@/assets/images/sample-1.jpg">

Error in the browser Console:

GET http://localhost:3000/@/assets/images/sample-1.jpg 
Failed to load resource: the server responded with a status of 404 (Not Found)
client:180 [vite] connecting...
client:202 [vite] connected.

Any ideas how to do it correctly?

like image 451
Run Avatar asked Sep 10 '25 12:09

Run


2 Answers

Looks like no additional plugins needed (vite 3.1.0), configuration vite.config.js:

import { defineConfig } from 'vite';
import * as path from 'path';

export default defineConfig({
...
    resolve: {
        alias: [
            { find: '@', replacement: path.resolve(__dirname, 'src') },
        ],
    },
...
});

tsconfig.json

{
  "compilerOptions": {
...
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
    },
...
  },
...
}

Also don't forget about linting, eslint also should know about aliases. Just install eslint plugin eslint-import-resolver-alias and define it in eslint config .eslintrc.js

module.exports = {
...
    settings: {
        'import/resolver': {
            node: {
                extensions: ['.js', '.vue', '.ts', '.d.ts'],
            },
            alias: {
                extensions: ['.vue', '.js', '.ts', '.scss', '.d.ts'],
                map: [
                    ['@/components', './src/components'],
                    ['@/pages', './src/pages'],
                    ['@/router', './src/router'],
                    ['@/store', './src/store'],
                    ['@/styles', './src/styles'],
                    ['@/types', './src/types'],
                    ['@/utils', './src/utils'],
                ],
            },
        },
    },
...
};

As you can see I defined aliases for every folder, it's because i got problem with alias for whole folder src, it throw error for packages started with @ symbol - can't resolve package, but current way works well.

like image 153
Joyful Avatar answered Sep 13 '25 03:09

Joyful


npm install @rollup/plugin-alias --save-dev

or

yarn add -D @rollup/plugin-alias

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import alias from '@rollup/plugin-alias'
import { resolve } from 'path'

const projectRootDir = resolve(__dirname);

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    alias({
      entries: [
        {
          find: '@',
          replacement: resolve(projectRootDir, 'src')
        }
      ]
    })
  ],
  server: {
    host: '0.0.0.0',
    port: 10086, 
    open: false,
    cors: true, 
  },
  build: {
    outDir: 'dist',
  }
})

or


import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import alias from '@rollup/plugin-alias'
import { resolve } from 'path'

const projectRootDir = resolve(__dirname);

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    alias(),
    vue()
  ],
  resolve: {
    alias: {
      "@": resolve(projectRootDir, "src"),
    },
  },
  server: {
    host: '0.0.0.0',
    port: 10086,
    open: false, 
    cors: true, 
  },
  build: {
    outDir: 'dist',
  }
})


like image 23
keyboard_wang Avatar answered Sep 13 '25 01:09

keyboard_wang