На OSX/* NIX каталог ~/.npm
имеет кэш НПМ, который, кажется, структурировано, как это:требует NPM модуль из кэша НПМ
foo/
0.1.2/
1.0.01/
1.3.34/
2.0.1/
bar/
0.3.8/
2.1.1/
baz/
3.2.1/
4.1.7/
Я интересно, если мы могли бы потребовать каталог модулей из этого каталога. Я уверен, что это полностью противоречит философии NPM, но просто интересно, что самым простым способом было бы это сделать.
Я предполагаю, что изменение NODE_PATH для использования каталога ~/.npm было бы возможно, но каталог ~/.npm, похоже, имеет другую структуру, поэтому не уверен, что require()
может работать с этим.
Мы видим новых менеджеров пакетов, таких как Yarn
, которые пытаются улучшить NPM
. На мой взгляд, до сих пор я до сих пор запутался, почему NPM не просто использует кеш .npm для ссылок на ссылки (зачем их переписывать локально в каталоге проекта?), Но, возможно, кто-то может это решить.
Моя конечная цель - найти способ получить огромные зависимости, такие как Babel, Istanbul, в одном месте на диске и ссылаться на это место повсюду (по крайней мере, для одного и того же пользователя). С такими инструментами, как NVM, глобальное расположение модулей (npm root -g) изменяется, поэтому лучше всего использовать что-то в каталоге $ HOME, а поскольку кэш уже включен, он предлагает возможность.
Помимо управления NODE_PATH для работы с каталогом ~/.npm (я просто попробовал, и структура каталогов ~/.npm, похоже, исключает это), другим решением может быть использование программной части npm.
Что-то вроде этого:
const npm = require('npm');
npm.load({
loaded: false
}, function (err) {
// catch errors
npm.commands.install(['babel','istanbul'], function (er, data) {
// log the error or data
});
npm.on('log', function (message) {
// log the progress of the installation
console.log(message);
});
});
Если у вас есть каталог 'projects /', вы можете установить вещи в 'node_modules' этого каталога и каждый подкаталог, который содержит' require() 'для модуля в родительском' node_modules' * должен * иметь возможность доступа (см. [Документы узла] (https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)). Это близко к тому, что вам нужно, или вы специально хотите, чтобы кеш был источником? – Aurora0001