2015-11-14 2 views
3

У меня есть следующая проблема. Я устанавливаю uuid с npm install -g uuid. Когда я пытаюсь запустить следующий код:Не может потребоваться глобальный модуль npm

var uuid = require("uuid"); 
console.log(uuid.v1()); 

генерируется исключение:

module.js:339 
throw err; 
^ 

Error: Cannot find module 'uuid' 
at Function.Module._resolveFilename (module.js:337:15) 
at Function.Module._load (module.js:287:25) 
at Module.require (module.js:366:17) 
at require (module.js:385:17) 
at Object.<anonymous> (d:\CodingProjects\HTML\TestJavascript.js:16:12) 
at Module._compile (module.js:435:26) 
at Object.Module._extensions..js (module.js:442:10) 
at Module.load (module.js:356:32) 
at Function.Module._load (module.js:311:12) 
at Function.Module.runMain (module.js:467:10) 

Если установить модуль локально с npm install uuid он работает отлично. Но почему это? Что мне делать, чтобы мои глобальные пакеты работали? Я попытался загрузить его с Language & Frameworks -> Javascript -> Libraries, но я все равно получаю исключение, если я не устанавливаю его локально для своего проекта.

Заранее спасибо.

ответ

4

Причина в том, как npm устанавливает пакеты.

Когда вы запустите npm install -g <package>, вы сообщите npm, чтобы установить <package> по всему миру. Это работает, когда вы хотите использовать пакет как инструмент командной строки, как, например, Gulp:

$ npm install -g gulp 
$ cd path/to/project 
$ gulp 

Однако, это не работает, если вы хотите, чтобы в зависимости от пакета.

Чтобы определить размер упаковки, вы должны установить ее локально, т.е. е. в каталоге проекта. Это один из основных преимуществ npm: локальная установка упрощает управление зависимостями и улучшает их. Команда npm install без знака -g предназначена именно для этого. При запуске

$ npm install uuid 

, скажем, foo каталог, каталог foo/node_modules создается и uuid модуль установлен там. После этого вы можете создать файл .js в каталоге foo (или любом его подкаталоге), из него должен быть установлен модуль uuid, и все будет работать.


Как WebStorm: загрузка библиотеки из Language & Frameworks → Javascript → Libraries фактически не загрузить npm пакет, он просто загружает и устанавливает определения типа библиотеки. Определения типов помогают WebStorm строить лучшую автозаполнение при использовании библиотеки в вашем коде.

+0

спасибо. Ваш ответ помогает мне понять, как это работает. – DPM

+0

@DPM: Я рад, что это полезно. –

2

Если вы хотите использовать свои глобальные пакеты, все, что вам нужно сделать, это создать связь между вашим глобальным пакетом из вашего локального каталога. Это также известно как создание символической ссылки (символическая ссылка).

Итак, запуск «npm link uui» в вашем локальном каталоге позволит вам использовать глобальный пакет, не загружая его в ваш локальный каталог. Если вы проанализируете локальный каталог, вы заметите, что была создана (связанная) папка, а это означает, что это всего лишь указатель на глобальный пакет.

Итак, если вы хотите использовать глобальные пакеты, то это означает, что «npm link» - это способ сделать это.

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