2013-08-03 10 views
11

У меня есть проблема по установке NPMNPM: как создать ./node_modules/.bin папку?

Я создал проект сказать, проект

cd ~/projectA 
npm install sails 

но команда парусов не найден после установки.

Я знаю, что он успешно установлен в каталоге ~/projectA/node_modules. , но исполняемый файл не может быть найден. И я знаю, что он установлен ~/projectA/node_modules/.bin

Как я могу исправить .bin автоматически, когда я вхожу в эту папку проекта?

Я сделал что-то не так?

+0

Вы уверены, что он установлен в '~/Projecta/node_modules/.bin', а не '~/projectA/node_modules/паруса/bin' вместо этого? Что вы подразумеваете под исходным кодом? – verybadalloc

+0

@verybadalloc source как unix dot http://en.wikipedia.org/wiki/Dot_(Unix) и http://superuser.com/a/46146 – SHernandez

+2

Возможный дубликат [Как использовать пакет, установленный локально в узле \ _modules?] (http://stackoverflow.com/questions/9679932/how-to-use-package-installed-locally-in-node-modules) – mightyiam

ответ

15

Я могу дать вам безвкусное решение, которое работает для меня. Я только что экспортировал свой путь в мой .bashrc-файл.

export PATH="$PATH:./node_modules/.bin" 

Редактировать: Прошло некоторое время, но я поменял свою стратегию на использование сценариев npm. В приведенном выше случае, установка package.json следующим образом:

"scripts": { 
    "sails": "sails" 
} 

Что вы можете работать с

npm run sails 

с аргументами

npm run sails -- <args> 
+6

Я бы поставил node_modules/.bin первым: 'export PATH = "./node_modules/.bin:$PATH" ' –

+0

Upvote для использования сценариев npm, а также для подсказки о том, как использовать args – logan

2

Для использования в командной строке, например sails generate foo, вам необходимо установить модуль npm по всему миру.

npm install -g sails 

Вы также можете использовать путь к бин в команде, если вы не хотите, чтобы установить глобально:

./node_modules/sails/bin/sails.js generate foo 
2

Официальные инструкции для парусов (https://github.com/balderdashy/sails) (

К установить последнюю стабильную версию с помощью инструмента командной строки:

sudo npm -g install sails 

Это устанавливает глобально и добавляет в каталог как /usr/local/bin, которые должны быть в вашем $PATH.

Но чтобы ответить на общий вопрос о расположении бинарных файлов, если установить на месте, они должны быть помещены в ./node_modules/.bin директории (так запустить ./node_modules/.bin/sails ...)

10

Вы должны использовать команду npm bin, чтобы получить абсолютный путь к вашему текущий каталог bin узла.

Например:

➤ lessc 
bash: lessc: command not found 
➤ npm bin 
/home/brice/[...]/node_modules/.bin 
➤ export PATH=$(npm bin):$PATH 
➤ lessc --version 
lessc 1.7.3 (Less Compiler) [JavaScript] 

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

1

Немного более надежным является:

export PATH=$(npm bin):$PATH 

Вы можете либо запустить его, добавить его в свой профиль оболочки, или создать псевдоним, как:

alias snpm='export PATH=$(npm bin):$PATH' 

Если идти маршрут псевдонима , обязательно используйте одинарные кавычки, чтобы задерживать выполнение переменных!

+0

Спасибо за помощь! –

0

Если вам не нравится испортить ваш PATH для запуска сценария npm, который не является глобальным - например, вы единственный, кто его использует, - я лично рекомендовал бы использовать псевдоним sh ".

  1. НОЙ установка (локально) ваш любимый пакет (JSON-дифф здесь, например)

    cd ~ && npm install json-diff 
    
  2. псевдонима он (сохранить его в файле ~/.xxxxrc файл):

    alias diffj "\`npm bin\`/json-diff !*" 
    

Тогда для сравниваете 2-х JSON:

diffj old.json new.json 
0

В моей ~/.bashrc я следующее:

function nbin { 
    local dir; 
    dir=$(npm bin) 
    if [ -d "$dir" ]; then 
    (# subshell to not change this shell's $PATH 
     PATH=$dir:$PATH 
     eval "[email protected]" 
    ) 
    else 
    echo "\"$dir\" is not an npm binary directory." >&1 
    return 1 
    fi 
} 

можно затем запустить исполняемый foo в каталоге .bin как:

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