【问题标题】:Vite: resolve.alias - how to resolve paths?Vite: resolve.alias - 如何解析路径?
【发布时间】:2022-01-16 17:05:52
【问题描述】:

resolve.alias 能做什么?它无法解析以下路径:

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

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

在我的 HTML 中:

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

浏览器控制台出错:

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.

任何想法如何正确地做到这一点?

【问题讨论】:

    标签: javascript vite


    【解决方案1】:

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

    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',
      }
    })
    
    

    
    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',
      }
    })
    
    
    

    【讨论】:

      【解决方案2】:

      版本 2.7.12(我当前)的一个简单解决方案是将别名声明为 array

      import vue from '@vitejs/plugin-vue'
      import { defineConfig } from 'vite'
      import path from 'path'
      
      export default defineConfig({
        plugins: [ vue() ],
        resolve: {
          alias: [
            { find: '@', replacement: path.resolve(__dirname, './src') },
            { find: '@config', replacement: path.resolve(__dirname, './src/config') },
            { find: '@plugins', replacement: path.resolve(__dirname, './src/plugins') },
            { find: '@views', replacement: path.resolve(__dirname, './src/views') },
            { find: '@mixins', replacement: path.resolve(__dirname, './src/mixins') },
            { find: '@svg', replacement: path.resolve(__dirname, './src/svg') },
            { find: '@models', replacement: path.resolve(__dirname, './src/models') },
            { find: '@components', replacement: path.resolve(__dirname, './src/components') },
          ]
        }
      })
      

      查看类型时可以看到合法格式:

      resolve?: ResolveOptions & {
        alias?: AliasOptions;
      };
      

      其中 AliasOptions 是别名的数组

      export declare type AliasOptions = readonly Alias[] | { [find: string]: string }
      

      【讨论】:

        猜你喜欢
        • 2023-01-24
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        相关资源
        最近更新 更多