Запуск глобально установленных пакетов npm
может кто-нибудь объяснить, как ведут себя глобально установленные узлы. Это действительно сбивает меня с толку. Если я устанавливаю пакет (с исполняемыми файлами), например http-server
глобально я могу запустить его с:
http-server
но если я это сделаю
node http-server
Я
module.js:339
throw err;
^
Error: Cannot find module '/path/to/current/dir/http-server'
at Function.Module._resolveFilename (module.js:337:15)
at Function.Module._load (module.js:287:25)
at Function.Module.runMain (module.js:457:10)
at startup (node.js:136:18)
at node.js:972:3
Я подозреваю, что мой tern
пакета emacs
пытается запустить его с node
отсюда и ломка. Почему это происходит? Почему node не может найти путь к собственным модулям?
4 ответов
rahul@Rahul-Machine:~$ node blalal
module.js:338
throw err;
^
Error: Cannot find module '/home/rahul/blalal'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:286:25)
at Function.Module.runMain (module.js:475:10)
at startup (node.js:117:18)
at node.js:951:3
ooh та же ошибка
это потому, что я первая команда, вы на самом деле пытаетесь получить доступ к глобальной переменной, но во-вторых, вы находитесь где-то в вашей файловой иерархии, и оттуда вы говорите, что хотите получить доступ к этому пакету, поэтому вы ошибаетесь, если хотите выполнить этот глобальный пакет try
whereis http-server
затем перейдите в этот каталог и найдите файл пакета.json, а затем откройте его и найдите свойство "main", и там вы получите имя файла тип
node index.js
ваш файл будет выполнен
существует два способа установки пакетов:globally
и locally
.
локально установленные файлы пакетов заканчиваются в вашем локальном node_modules
(в папке проекта, куда вы позвонили npm install some-package
).
установленные файлы пакетов попадают в вашу систему, поэтому они доступны в командной строке, если глобально установленные пакеты предоставляют исполняемый файл, то вы можете вызвать его в командной строке напрямую some-package
(без node
), если он не предоставляет исполняемый файл, то вы можете использовать его в режиме расх (node
) как var package = require('some-package')
и он также доступен локально (внутри папку вашего проекта, даже если вы не установили его на месте).
это началось как комментарий, но теперь немного дольше.
проблема не совсем node
не найти глобальные пакеты,node
только поиск пакетов в текущем местоположении (например, в разделеnode_modules
), и это намеренно. Глобально установленные пакеты можно запускать из команды, например, из-за way npm
устанавливает их, и это то, что делает глобальные пакеты особенными в некотором роде.
в системах на базе Unix npm создает мягкие ссылки на основные исполняемые файлы глобально установленных пакетов, например http-server
в папке, в пути к исполняемому файлу. На моей машине, это /usr/local/bin/
. Вот почему эти команды могут быть вызваны из командной строки без указания полного пути.
в Windows npm создает исполняемый пакетный файл с именем, например http-server.cmd
под %APPDATA%
(обычно что-то вроде C:\Users\YourUserName\AppData\Roaming
). Пакетный файл содержит инструкции по запуску целевого исполняемого файла из того места, где он находится на самом деле установленный.
когда вы устанавливаете что-то глобально, вы сохраняете переменную с сохраненным путем, связанным с ней, а также с программой выполнения. В то время как ваша операционная система будет знать, как получить к нему доступ. Узел не будет. Если вы хотите " что-то узловое.js " вы либо находитесь в каталоге, либо настраиваете свой путь так, чтобы узел знал, как добраться до файла. например,узел "c:/jsapps/main/app.js" или если вы были в позволяет сказать папку "jsapps" вы бы ввести узел " main / app.js" для выполнения того же файла.