Я поддерживаю библиотеку JavaScript, которая публикуется в реестре npm и имеет множество зависимостей. Сложно отслеживать, какая часть кода зависит от внешних пакетов.
К сожалению, ни одна из lerna
, yarn
рабочих пространств, npm link
или npm
локальная декларация декларации о зависимости пути. (Я объясню, почему после примера.)
Я хочу разбить список dependencies
, объявленный в package.json
, извлекая некоторые из зависимостей в новые "подпакеты".
Итак, вместо следующего списка зависимостей
// ~/code/example-lib/package.json
{
"name": "example-lib",
"dependencies": {
"lodash": "*",
"request": "*",
"chalk": "*",
"bluebird": "*",
"mz": "*",
"moment": "*",
"socket.io": "*",
"socket.io-client": "*",
"react": "*",
"react-dom": "*"
}
}
Я хочу извлечь некоторые из зависимостей в новый локальный пакет example-lib-subpackage
. С локальным я имею в виду, что example-lib-subpackage
предназначен только для потребления example-lib
.
example-lib-subpackage
список зависимостей будет:
// ~/code/example-lib/packages/example-lib-subpackage/package.json
{
"name": "example-lib-subpackage",
"dependencies": {
"lodash": "*",
"request": "*",
"bluebird": "*",
"moment": "*",
"socket.io-client": "*",
"react": "*",
"react-dom": "*"
}
}
и example-lib
список зависимостей затем будет значительно уменьшен до:
// ~/code/example-lib/package.json
{
"name": "example-lib",
"dependencies": {
"chalk": "*",
"example-lib-subpackage": "./packages/example-lib-subpackage",
"mz": "*",
"socket.io": "*"
}
}
Обратите внимание, что теперь example-lib
зависит от локального пакета example-lib-subpackage
;
...
"name": "example-lib",
"dependencies": {
...
"example-lib-subpackage": "./packages/example-lib-subpackage",
...
Кто-нибудь достиг этого? Это было бы супер удобно.
Обратите внимание, что рабочие области lerna
и yarn
имеют только помощь, если вы в порядке публикуете локальные пакеты в реестре npm. Но в моем случае публикация локального пакета example-lib-subpackage
в реестре npm не имеет смысла.
Кроме того, функция привязки npm link
и npm
локального пути работает только для пакетов, которые не опубликованы, но example-lib
должен быть включен в реестр npm.
Локальные пути [...] не должны использоваться при публикации пакетов в общий реестр.
Цитата из https://docs.npmjs.com/files/package.json#local-paths