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

问题描述 投票:479回答:22

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

npm install coffee-script

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

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

node.js coffeescript npm node-modules
22个回答
550
投票

UPDATE


6
投票

我更喜欢不依赖shell别名或其他软件包。

.\node_modules\.bin\wdio wdio.conf.jsscripts部分添加简单的行,您可以运行本地npm命令,如


5
投票

如果要根据当前工作目录正确更新PATH变量,请将其添加到等价于{ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "webpack": "webpack" }, "devDependencies": { "webpack": "^4.1.1", "webpack-cli": "^2.0.11" } } 的末尾(或在定义.bashrc的任何内容之后:]

PATH

5
投票

我一直使用与@guneysus相同的方法来解决此问题,该方法是在package.json文件中创建一个脚本,并使用它运行npm run script-name。

但是,最近几个月我一直在使用node-mode-off,我喜欢它。


2
投票

Here's an article就像是nodejs的“ bundle exec”。它类似于使用zxc

PATH=$(npm bin):$PATH

2
投票

相同,@ regular的可接受的解决方案,但鱼壳有味道

$ npm install -g zxc
$ npm install gulp
$ zxc which gulp
/home/nathan/code/project1/node_modules/.bin/gulp

1
投票

您也可以使用direnv并仅在工作文件夹中更改$ PATH变量。

if not contains (npm bin) $PATH
    set PATH (npm bin) $PATH
end

1
投票

将此脚本添加到您的$ cat .envrc > export PATH=$(npm bin):$PATH 。然后,您可以呼叫.bashrc或在本地进行任何操作。这对于您的笔记本电脑很方便,但是请不要在服务器上使用它。

coffee

1
投票

对于Windows使用此:

cd

0
投票

我遇到了相同的问题,我不特别喜欢使用别名(如/* cmd into "node_modules" folder */ "%CD%\.bin\grunt" --version 的建议),如果您也不太喜欢它们,那么我将使用另一种解决方法,您首先必须创建一个别名可执行bash脚本,例如setenv.sh:


0
投票

我很想知道这是否是一个不安全/不好的主意,但经过一番思考,我在这里看不到问题:

修改Linus不安全的解决方案以将其添加到末尾,使用..., scripts: { 'start': './setenv.sh <command>' } 查找目录,并使脚本仅在父级中存在npm bin时才调用npm bin(为了提高速度),这就是我想出了package.json


394
投票

Nice example


0
投票

我是__add-node-to-path() { if [ "$(find-up package.json)" != "" ]; then new_bin=$(npm bin) if [ "$NODE_MODULES_PATH" != "$new_bin" ]; then export PATH=${PATH%:$NODE_MODULES_PATH}:$new_bin export NODE_MODULES_PATH=$new_bin fi else if [ "$NODE_MODULES_PATH" != "" ]; then export PATH=${PATH%:$NODE_MODULES_PATH} export NODE_MODULES_PATH="" fi fi } export PROMPT_COMMAND="__add-node-to-path" 用户,这对我有用:

Windows

0
投票

[如果您使用// First set some variable - i.e. replace is with "xo" D:\project\root> set xo="./node_modules/.bin/" // Next, work with it D:\project\root> %xo%/bower install ,并且出于安全原因不想添加到fish shell。我们可以添加以下函数来运行本地节点可执行文件。

$path

现在您可以运行类似:


-9
投票

在package.json中包含coffee-script以及每个项目所需的特定版本,通常是这样的:

fishshell

然后运行npm install在每个项目中安装依赖项。这将安装指定版本的coffee-script,可在每个项目本地访问。


95
投票

使用npm bin命令获取项目的节点模块/ bin目录


77
投票

使用npm run[-script] <script name>


42
投票

使用npm-run


41
投票

更新:


22
投票

PATH解决方案的问题是,如果$(npm bin)放在您的.profile / .bashrc / etc中,则它会被评估一次,并永远设置为该路径首先在其中评估的目录。如果您修改当前路径,那么每次运行脚本时,路径都会增加。


21
投票

如果要保留npm,则npm-exec r.js <args> 应该做您需要的事情。


11
投票

更新:如果您使用的是最近的npm(版本> 5.2)

© www.soinside.com 2019 - 2024. All rights reserved.