Сокращение путей с помощью алиасов
source icon
Сокращение путей с помощью алиасов — Разработка на vc.ru
Предистория
Когда для создания блога я использовал Nuxt я увидел там крутую фичу: для указания корневого каталога использовался алиас @ или ~~.
// Вместо того чтобы писать
import Data from '../../../data/someData';

// В Nuxt можно было писать следующим образом:
import Data from '@d/someData';
Сегодня мы реализуем такую же возможность при помощи изменения конфигурации для Typescript и Vite.
Typescript
Для того чтобы Typescript понимал алиасы - нам достаточно добавить следующие поля в tsconfig.json:
tsconfig.json:
{
  // Добавляем директорию откуда будут строиться пути
  "baseUrl": ".",

  // Добавляем алиасы для путей
  "paths": {
    "@/*": ["src*"],
    "@data/*": ["src/data/*"]
  }
}
Vite
Если мы используем Vite без Typescript, то нам нужно указать алиасы в конфигурации Vite:
vite.config.ts:
import {fileURLToPath} from "url";
import {defineConfig} from 'vite';

export default defineConfig({
  // ...
  resolve: {
    alias: [
      { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) },
      { find: '@data', replacement: fileURLToPath(new URL('./src/data', import.meta.url)) },
    ],
  },
  // ...
})
Webpack
Если же мы являемся мамонтом собираем продукт на Webpack, то нам нужно написать следующее в конфигурации Webpack:
webpack.config.js:
const path = require('path');

module.exports = {
  //...
  resolve: {
    alias: {
      "@": path.resolve(__dirname, 'src/'),
      "@data": path.resolve(__dirname, 'src/data/'),
    },
  },
  // ...
};
Rollup
Для того чтобы использовать алиасы в Rollup нам нужен плагин. Плагин можно установить следующей командой:
npm i -D @rollup/plugin-alias
Далее пишем следующий код в конфигурации:
rollup.config.js:
import alias from '@rollup/plugin-alias';

module.exports = {
  // ...
  plugins: [
    alias({
      entries: [
        { find: '@', replacement: 'src/' },
        { find: '@data', replacement: 'src/data/' }
      ]
    })
  ]
  // ...
};
ESBuild
Для того чтобы добавить алиасы к ESBuild нужно установить плагин:
npm i -D esbuild-plugin-alias
Затем нужно добавить следующее в конфигурацию:
const esbuild = require('esbuild');
const alias = require('esbuild-plugin-alias');

esbuild.build({
  // ...
  plugins: [
    alias({
      '@': path.resolve(__dirname, `./src/*`),
      '@data': path.resolve(__dirname, `./src/data/*`),
    }),
  ],
  // ...
});