2013-09-02 4 views
16

я пытаюсь установить экспресс-пакет, используя НПМ из внутри/дома/айваном/мой-проект Каталог:NPM Устанавливает пакет Вне текущей директории

npm install express 

[email protected] ../node_modules/express 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] 
├── [email protected] ([email protected]) 
└── [email protected] ([email protected]) 

Странная вещь НПМ не устанавливает экспресс пакет в текущей директории (/ home/iwan/my-project/node_modules/express), но в/home/iwan/node_modules/express.

Я что-то пропустил?

ответ

47

Если каталог node_modules не существует в вашем текущем каталоге, NPM будет искать его в более высоких каталогах, пока не найдет его. Итак, если родительский каталог имеет каталог node_modules, NPM предположит, что он должен устанавливать модули.

Быстрый способ создать пустой каталог node_modules, где вы хотите разместить модули.

+0

Ах, спасибо @Brad. Теперь ясно. –

+1

На самом деле я приехал сюда из Google, ищущего противоположное поведение, поэтому мне не нужно всегда идти 'cd ..' перед установкой. Решение было снова - как утверждается в этом ответе - создать 'node_modules' в родительском каталоге. –

+0

Нет, это не сработает. Если я устанавливаю 'npm install --save redux', он устанавливается в папку, в моей командной строке (путем создания папки' node_modules') и не проверял папки 'node_modules', которые были в родительском каталоге. –

2

Я считаю, что лучший способ установить пакеты с npm - это сделать файл package.json. Как это, просто поместите его в каталог smae как свое приложение. Пример файла package.json может выглядеть следующим образом:

{ 
    "name": "application-name", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "node app.js" 
    }, 
    "dependencies": { 
    "express": "3.3.5", 
    "jade": "*", 
    "less-middleware": "*", 
    "ejs": "*", 
    "mongoose": "3.6.*" 
    } 
} 

Посмотрите на список зависимостей. Просто добавьте модуль, который вы хотите, например, underscore. Просто добавьте его в зависимости dict. Как так:

{ 
    "name": "application-name", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "node app.js" 
    }, 
    "dependencies": { 
    "express": "3.3.5", 
    "jade": "*", 
    "less-middleware": "*", 
    "ejs": "*", 
    "mongoose": "3.6.*", 
    "underscore": "*" <-------------- Added 
    } 
} 

Затем над головой в каталог и просто запустить npm install, и бац! Все пакеты и их зависимости будут установлены для вас. Он будет выполнять всю работу, а это значит сделать вашу папку node_modules для вас. Это как мой каталог приложения выглядит следующим образом:

enter image description here

+0

Отлично! Спасибо. package.json делает приложение более понятным и информативным. –

+0

@KurniawanJunaidy Если это сработало для вас, пожалуйста, поддержите и примите ответ. –

+1

Пожалуйста, не используйте этот пример. Если вы используете * для своих пакетов в производстве, вы в конечном итоге столкнетесь с нарушением изменений и потратите слишком много времени на их устранение. Если вы находитесь в активной разработке и хотите, чтобы ваши пакеты были постоянно обновлены, обязательно используйте звездочки, тильды или морковь, но не оставляйте их на производстве. – SgtPooki

0

Вы также можете создать пустой файл package.json методическими от https://docs.npmjs.com/files/package.json веб-страницы. Затем поместите это в папку проекта и введите npm install.