2013-08-03 149 views
11

我有NPM安裝問題NPM:如何獲取./node_modules/.bin文件夾?

我創建了一個項目說項目中

cd ~/projectA 
npm install sails 

但帆命令不安裝後發現的。

我知道它已成功安裝在~/projectA/node_modules目錄中。 但可執行文件無法找到。而且我知道它已經安裝了~/projectA/node_modules/.bin

我怎樣才能在我進入這個projectA文件夾時自動獲取.bin文件?

我做錯了什麼?

+0

你確定它是在'〜/了projectA安裝/ node_modules/.bin'而不是'〜/ projectA/node_modules/sails/bin'而不是?你是什​​麼意思的來源? – verybadalloc

+0

@verybadalloc源代碼像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腳本,並提示如何使用參數 – 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 

您可以運行它,將它添加到你的shell配置文件或創建類似的別名:

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

如果你去的別名路線,請務必使用單引號,以便延遲變量的執行!

+0

感謝您的幫助! –

0

如果您不喜歡弄錯PATH來運行非全局npm腳本 - 例如你是唯一使用它的人,我個人推薦使用sh別名。

  1. NPM安裝(本地)您心愛的包(JSON-DIFF這裏,例如)

    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 
} 

然後我可以在.bin目錄中運行可執行foo

nbin foo