如何使用在node_modules中本地安裝的軟件包?

如何在node.js中使用模塊的本地版本。 例如,在個人應用中,我安裝了coffee-script: node

npm install coffee-script

這會將它安裝在./node_modules ,而coffee命令在./node_modules/.bin/coffee 。 當我位於項目的主文件夾中時,是否能夠運行此命令? 我猜我在尋找與bundler中的bundle exec相似的東西。 基本上,我想指定一個咖啡腳本的版本,參與該項目的每一個人都應該使用。 npm

我知道我能夠添加-g標誌以在全球範圍內安裝它,這樣咖啡在任何地方均可以正常工做,可是若是我想每一個項目使用不一樣版本的咖啡怎麼辦? json


#1樓

更新 :正如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

#2樓

若是要根據當前工做目錄正確更新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-modenode-mode-off在終端中啓用和禁用它。


#3樓

使用npm bin命令獲取項目的節點模塊/ bin目錄

$ $(npm bin)/<binary-name> [args]

例如

$ $(npm bin)/bower install

#4樓

我遇到了一樣的問題,我不特別喜歡使用別名(按照常規建議),若是您也不喜歡它們,那麼這是我使用的另外一種解決方法,您首先必須建立一個很小的可執行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>'
}

#5樓

使用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塊的狀況下能夠運行,那將是很好的。

相關文章
相關標籤/搜索