如何使用在node_modules中本地安装的软件包?

戏子无情 提交于 2020-02-26 00:08:11

如何在node.js中使用模块的本地版本。 例如,在我的应用中,我安装了coffee-script:

npm install coffee-script

这会将它安装在./node_modules ,而coffee命令在./node_modules/.bin/coffee 。 当我位于项目的主文件夹中时,是否可以运行此命令? 我猜我在寻找与bundler中的bundle exec类似的东西。 基本上,我想指定一个咖啡脚本的版本,参与该项目的每个人都应该使用。

我知道我可以添加-g标志以在全球范围内安装它,这样咖啡在任何地方都可以正常工作,但是如果我想每个项目使用不同版本的咖啡怎么办?


#1楼

更新 :正如Seyeong Jeong在下面的答案中指出的那样,从npm 5.2.0开始,您可以使用npx [command] ,这更加方便。

5.2.0之前的版本的旧答案

推杆的问题

./node_modules/.bin

进入PATH的地方是,它仅在当前工作目录是项目目录结构的根目录(即node_modules的位置) node_modules

与您的工作目录无关,您可以使用以下命令获取本地安装的二进制文件的路径:

npm bin

要执行与您在项目目录层次结构中的位置无关的本地安装的coffee二进制文件,可以使用此bash构造

PATH=$(npm bin):$PATH coffee

我将其别名为npm-exec

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块的情况下可以运行,那将是很好的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!