@Tdvist

Как сделать aliases доступными при установке пакета?

Есть пакет написанный мной.
в package.json задал entry point для экспорта классов и логики.
"main": "./src/index.js"
И не подтягиваются в проект элементы экспортируемые из index.js с использованием alias
export { something } from "@/something.js" // не экспортируется
export { something } from "./path/to/something.js" // все ок

в package.json пакета указал
"@/*": "./path/to"
В проекте в котором использую пакет юзаю Vite в качестве сборщика.
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
SeaInside
@SeaInside
15 лет пилю все эти штуки
Не очень понятно, где проблема - под алиасами тут будто бы понимаются одновременно именованные экспорты из пакетов и одновременно алиасы для импорта внутри самого приложения.

Если у вас внешний пакет (иначе непонятно, причём тут `main` в `package.json`), и вам нужно сделать экспорт конкретного файла по "короткому" пути, то следует оформить так:

// package.json вашего пакета, допустим, "mypackage"

{
  "name": "mypackage",
  "exports": {
    ".": "./dist/index.js",
    "./whatever/": "./dist/whatever/non-index.js"
  } 
}

Важно: это минимальная версия, там есть тонкости относительно разного экспорта ESM, CJS и d.ts файлов, но тут такой вопрос не стоит.

Если у вас есть такой пакет, то в другом пакете, в который вы установили его как зависимость, вы можете импортировать по "короткому" пути:

// "Короткий" импорт, без него пришлось бы делать что-то вот такое:
// import { whatever } from 'mypackage/dist/whatever/non-index.js';

import { whatever } from 'mypackage/whatever';


---

Если речь идёт о том, чтобы использовать алиасы внутри одного проекта, то следует сконфигурировать алиасы в `vite.config.ts`, документация вот здесь, выглядеть будет примерно так:

// vite.config.ts

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

export default defineConfig({
  resolve: {
    alias: [
      { find: '~components', replacement: fileURLToPath(new URL('./src/components', import.meta.url)) },
    ],
}),


И в `(js|ts)config.json`, при наличии, добавить:
{
  "compilerOptions": {
    "paths": {
      "~components/*": ["./src/components/*"]
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы