2016-12-03 4 views
1

На 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); 
    }); 
}); 
+0

Если у вас есть каталог 'projects /', вы можете установить вещи в 'node_modules' этого каталога и каждый подкаталог, который содержит' require() 'для модуля в родительском' node_modules' * должен * иметь возможность доступа (см. [Документы узла] (https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)). Это близко к тому, что вам нужно, или вы специально хотите, чтобы кеш был источником? – Aurora0001

ответ

1

Я задавал себе тот же вопрос. Если у меня есть package.json со всеми зависимостями, в которых я нуждаюсь, и все зависимости, которые мне нужны, то почему бы мне захотеть сделать это снова и смутить себя и получить «усталость конфигурации»? Есть способ, я уверен, но каждый раз, когда я пытался использовать package.json или webpack.config.js, доступ к которому можно было получить из любого места, кроме предполагаемого места, когда я его построил, он не работает ни частично, ни вообще.

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

Просто используйте:

НПМ установки [зависимостей, DEV-инструменты, и все, что вам нужно]

, и вы должны быть сладкими.

Не нужно, чтобы ваши оптимальные конфигурации были переданы - просто держите свои команды установки npm под рукой, чтобы скопировать и вставить по желанию.

+0

Молодцы для вашего первого ответа! Я немного изменил его для форматирования и удалил пару комментариев, которые шли немного касательно, но кроме этого это интересное объяснение.Убедитесь, что вы посмотрели, что я изменил, чтобы вы могли видеть, что ожидается на сайте, поэтому ваши вопросы будут хорошо восприняты другими. – Aurora0001

Смежные вопросы