如何在node.js中使用一个模块的本地版本。例如,在我的应用程序中,我安装了coffee-script:
npm install coffee-script
这会将其安装在。/node_modules中,而coffee命令则安装在。/node_modules/.bin/coffee中。当我在项目的主文件夹中时,是否有一种方法可以运行此命令?我想我在寻找类似于捆绑执行者的东西。基本上,我想指定一个参与项目的每个人都应该使用的coffee-script版本。
我知道我可以添加-g标志来在全球范围内安装它,这样咖啡在任何地方都可以正常工作,但是如果我想在每个项目中使用不同版本的咖啡呢?
更新:正如Seyeong Jeong在他们的回答中指出的那样,从npm 5.2.0开始,你可以使用npx[命令],这更方便。
5.2.0之前版本的旧答案:
放置的问题
./node_modules/.bin
只有当你的当前工作目录是你的项目目录结构的根目录(即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
我提出了一个我已经开发的新解决方案(05/2021)
您可以使用lpx https://www.npmjs.com/package/lpx来
运行本地node_modules/.bin文件夹中的二进制文件
在工作空间的任何地方运行工作空间根目录的node_modules/.bin中的二进制文件
如果在本地找不到二进制文件,LPX不会下载任何包(即不像npx)
例子:
LPX TSC -b -w将与本地typescript包一起运行TSC -b -w
TL;DR:使用npm exec与npm@>=7。
在其他回答中提到的npx命令已经在npm@7中完全重写,该命令默认与node@15一起发布,可以安装在node@>=10上。这个实现现在等于新引入的npm exec命令,它类似于之前的npx命令实现,但不等于。
一个不同之处在于,当一个依赖项还没有安装时,它总是交互式地询问是否应该下载它(也可以用参数——yes或——no来覆盖)。
这里有一个npm exec的例子。双破折号(——)将npm exec参数与实际的命令参数分开:
npm exec --no -- jest --coverage
请参见更新后的npm exec官方文档。
更新:如果你在最近的npm(版本>5.2)
你可以使用:
npx <command>
NPX在node_modules的.bin目录下查找命令
旧的回答:
对于Windows
将以下内容存储在一个名为npm-exec.bat的文件中,并将其添加到您的%PATH%
@echo off
set cmd="npm bin"
FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET modules=%%i
"%modules%"\%*
使用
然后你就可以用它
Npm-exec <command> <arg0> <arg1>…
例如
要执行本地node_modules目录下安装的wdio,请执行:
npm-exec wdio wdio.conf.js
例如,它将运行。\node_modules\.bin\wdio wdio.conf.js