У меня есть проект с модулем, который использует экспорт полного пути, а не индексные файлы.
Проект состоит из 2 рабочих пространств NPM. Одно есть core
другое examples
.
Проблема, которую я пытаюсь избежать, заключается в том, что путь импорта выглядит так: @my-project/core/dist/plugins/Input
Проблема, с которой я столкнулся, заключается в том, что мне удалось заставить Typscript построить выходные данные так, что TypeScript может компилироваться без необходимости иметь dist
в пути, однако Vite не будет собирать, поскольку утверждает, что не может найти соответствующий код.
Error: [vite]: Rollup failed to resolve import "@my-project/core/plugins/Input"
Машинописный текст работает нормально, что было проблемой, но, похоже, это было исправлено путем добавления следующего в мой package.json
"typesVersions": {
"*": {
"*": [
"./dist/*"
]
}
},
Я предполагаю, что это что-то особенное для моей конфигурации Vite, которая выглядит так:
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig(() => {
return {
build: {
outDir: 'build',
},
plugins: [
react({
// Use React plugin in all *.jsx and *.tsx files
include: '**/*.{jsx,tsx}',
}),
],
server: {
port: 3000,
host: true,
},
preview: {
port: 4000,
},
};
});
Я сводил себя с ума, пытаясь реализовать множество разных способов, и теперь я на полпути к компиляции TypeScript. Я надеюсь, что кто-нибудь сможет указать на простую, надеюсь, ошибку, которую я совершаю, чтобы Vite тоже работал.
Попробуйте указать пути экспорта в package.json пакета, который вы хотите импортировать. Что-то вроде этого:
{
"name": "@my-project/core",
...
"exports": {
".": "./dist/index.js",
"./plugins/Input": "./dist/plugins/Input",
}
}
Затем вы сможете импортировать подпапку следующим образом:
import { stuff } from '@my-project/core/plugins/Input'
Стоит отметить, что если этот пакет предназначен для публичного использования, вы можете добавить пути экспорта ESM и CJS для создания обоих наборов выходных данных:
".": {
"import": "./dist/index.js",
"require": "./dist/cjs/index.cjs"
},
Дай мне знать, как твои дела!
Нет проблем, пожалуйста, проголосуйте также, если это правильно! Should this be done for each of the exported paths?
: Да, если вы хотите предоставить в своем пакете как CommonJS, так и ESM, вам необходимо указать путь к каждому ресурсу как CJS/ESM. Если вы предоставляете только ESM, просто придерживайтесь этого формата ".": "./dist/index.js",
Это именно то, что мне нужно. Я беспрекословно верил, что экспорт будет рут и оттуда всё будет работать. Я не считал, что мне нужен каждый путь. Я очень ценю это простое решение и по ходу дела кое-что узнал... Спасибо! Что касается ``` ".": { "import": "./dist/index.js", "require": "./dist/cjs/index.cjs" }, ``` Должно ли это быть сделано для каждый из экспортированных путей?