Есть ли способ (какой-то API) в узле программно вызвать локальную публикацию npm, кроме как через создание

#node.js #npm

Вопрос:

Я пытаюсь получить список файлов из локального пакета, который будет опубликован npm. Лучшее решение, которое я нашел, — это использовать

 npm publish --dry-run
 

посредством child_processes.spawn(...) или связанным с этим способом.

Однако это не очень надежно, так как мне нужно проанализировать вывод текста, который не гарантированно будет/останется неизменным во всех средах/будущих выпусках.

Конечно, я мог npm pack бы и перечислить содержимое тарбола, но это скорее выходит за рамки моего проекта, так как, например, я бы не хотел полагаться на возможность записи в файловую систему.

Итак, существует ли «семантический» способ доступа к данным, возвращаемым npm publish ?

Ответ №1:

Чтобы ответить на мой собственный вопрос:

  1. Конкретный случай, с которым у меня возникли проблемы, был решен с помощью json опции, о которой я не знал на момент публикации вопроса:
     npm pack --dry-run --json
     

    через child_processes.spawn , что, по крайней мере, дает семантические результаты.

  2. На общий вопрос, т. е. можно ли было вызывать npm функции напрямую, а не через порождение, ответ, по-видимому, ОТРИЦАТЕЛЬНЫЙ.

    Я попытался установить npm как библиотеку:

     npm install npm
     

    а затем в исходном коде javascript

     const Pack = require('npm').Pack;
     

    привело к просвещению

    Ошибка: Программный API был удален в npm v8.0.0