如何在node.js
中使用模塊的本地版本。 例如,在個人應用中,我安裝了coffee-script: node
npm install coffee-script
這會將它安裝在./node_modules
,而coffee命令在./node_modules/.bin/coffee
。 當我位於項目的主文件夾中時,是否能夠運行此命令? 我猜我在尋找與bundler中的bundle exec
相似的東西。 基本上,我想指定一個咖啡腳本的版本,參與該項目的每一個人都應該使用。 npm
我知道我能夠添加-g
標誌以在全球範圍內安裝它,這樣咖啡在任何地方均可以正常工做,可是若是我想每一個項目使用不一樣版本的咖啡怎麼辦? json
更新 :正如Seyeong Jeong在下面的答案中指出的那樣,從npm 5.2.0開始,您能夠使用npx [command]
,這更加方便。 bash
5.2.0以前的版本的舊答案 : grunt
推杆的問題 ui
./node_modules/.bin
進入PATH的地方是,它僅在當前工做目錄是項目目錄結構的根目錄(即node_modules
的位置) node_modules
spa
與您的工做目錄無關,您能夠使用如下命令獲取本地安裝的二進制文件的路徑: rest
npm bin
要執行與您在項目目錄層次結構中的位置無關的本地安裝的coffee
二進制文件,能夠使用此bash構造 code
PATH=$(npm bin):$PATH coffee
我將其別名爲npm-exec server
alias npm-exec='PATH=$(npm bin):$PATH'
因此,如今我能夠
npm-exec coffee
不管我在哪裏,均可以運行正確的咖啡
$ pwd /Users/regular/project1 $ npm-exec which coffee /Users/regular/project1/node_modules/.bin/coffee $ cd lib/ $ npm-exec which coffee /Users/regular/project1/node_modules/.bin/coffee $ cd ~/project2 $ npm-exec which coffee /Users/regular/project2/node_modules/.bin/coffee
若是要根據當前工做目錄正確更新PATH變量,請將其添加到.bashrc
-equivalent的末尾(或在定義PATH
全部內容以後):
__OLD_PATH=$PATH function updatePATHForNPM() { export PATH=$(npm bin):$__OLD_PATH } function node-mode() { PROMPT_COMMAND=updatePATHForNPM } function node-mode-off() { unset PROMPT_COMMAND PATH=$__OLD_PATH } # Uncomment to enable node-mode by default: # node-mode
每次渲染bash提示時,這可能會增長一小段延遲(最有可能取決於項目的大小),所以默認狀況下將其禁用。
您能夠經過分別運行node-mode
和node-mode-off
在終端中啓用和禁用它。
使用npm bin
命令獲取項目的節點模塊/ bin目錄
$ $(npm bin)/<binary-name> [args]
例如
$ $(npm bin)/bower install
我遇到了一樣的問題,我不特別喜歡使用別名(按照常規建議),若是您也不喜歡它們,那麼這是我使用的另外一種解決方法,您首先必須建立一個很小的可執行bash腳本,說setenv.sh :
#!/bin/sh # Add your local node_modules bin to the path export PATH="$(npm bin):$PATH" # execute the rest of the command exec "$@"
而後您能夠使用如下命令在本地/bin
使用任何可執行文件:
./setenv.sh <command> ./setenv.sh 6to5-node server.js ./setenv.sh grunt
若是您在package.json中使用scripts
,則:
..., scripts: { 'start': './setenv.sh <command>' }
使用npm run[-script] <script name>
使用npm將bin軟件包安裝到本地./node_modules
目錄後,修改package.json
以添加<script name>
以下所示:
$ npm install --save learnyounode $ edit packages.json >>> in packages.json ... "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "learnyounode": "learnyounode" }, ... $ npm run learnyounode
若是npm install具備--add-script選項或其餘功能,或者npm run在不添加到scripts塊的狀況下能夠運行,那將是很好的。