如何在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块的状况下能够运行,那将是很好的。