narzantaria
@narzantaria
Программист С++, JavaScript, Node.js, React

Как прочитать «будущий» файл из пакета npm?

Я разрабатываю пакет npm, который должен прочитать конфигурационный файл, создаваемый пользователем в корневой папке проекта, куда этот пакет будет установлен. Как настроить этот пакет, чтобы после установки он мог прочитать этот файл, которого изначально не существует.
Я даже пробовал сделать так:
import { dbconfig } from "../../../dbconfig.ts";
Это относительный путь, чтобы прочитать файл dbconfig.ts из папки node_modules. Но этот способ выдает ошибку и проект не может быть собран, так как основан на typescript (а также файла dbconfig.ts изначально не существует в пакете npm). Есть ли способ решения этой проблемы и как это сделать?
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
Aetae
@Aetae
Тлен
Получить корень приложения можно простым трюком:
// если esm
//const _dirname = path.dirname(fileURLToPath(import.meta.url)); 

// просто берём весь путь, и отрезаем его перед первым вхождением node_modules
const appRoot = path.resolve(__dirname).split(/[/\\]node_modules/, 1)[0];

// если esm
// import(appRoot + "/dbconfig.js").then(...);
require(appRoot + "/dbconfig.js");

Я поменял ts на js, т.к. конфиг файл не должен быть ts, если ты делаешь полноценный npm пакет. Потому что полноценный npm-пакет это собранный js, который из ts только декларации оставляет и не умеет импортировать ts.
Если пакет у тебя исключительно под себя, то он может быть и тупо наюбором ts файлов, которые ты будешь у себя подключать и собирать в самом приложении. Тогда импорт ts возможен, но только для тебя, т.к. версий и настроек ts 100500 и практически гарантия, что у кого-то другого оно тупо не заведётся.

Там ещё очень много нюансов будет завязано на полноценно понимание как работает сборщики, что такое ts, и как будет работать конечный код. Если у вас его нет, то будет больно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
narzantaria
@narzantaria Автор вопроса
Программист С++, JavaScript, Node.js, React
Проблема решена с помощью
const { dbconfig } = require(`${process.cwd()}/dbconfig.ts`);

Хотя не знаю, является ли это наилучшим решением.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы