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

npm install coffee-script

这会将其安装在。/node_modules中,而coffee命令则安装在。/node_modules/.bin/coffee中。当我在项目的主文件夹中时,是否有一种方法可以运行此命令?我想我在寻找类似于捆绑执行者的东西。基本上,我想指定一个参与项目的每个人都应该使用的coffee-script版本。

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


当前回答

对于Windows,使用以下命令:

/* cmd into "node_modules" folder */
"%CD%\.bin\grunt" --version

其他回答

包中包括咖啡脚本。Json和每个项目所需的特定版本,通常如下所示:

"dependencies":{
  "coffee-script": ">= 1.2.0"

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

PATH解决方案有一个问题,如果$(npm bin)被放在你的.profile/。Bashrc /etc只计算一次,并且永远被设置到路径第一次计算所在的目录。如果您修改当前路径,那么每次运行脚本时,路径都会增长。

为了解决这些问题,我创建了一个函数并使用它。它不会修改您的环境,使用简单:

function npm-exec {
   $(npm bin)/$@  
}

然后可以像这样使用,而不需要对环境进行任何更改:

npm-exec r.js <args>

更新:我不再推荐这种方法,既是因为上面提到的安全原因,也是因为更新的npm bin命令。原答案如下:

正如您所发现的,任何本地安装的二进制文件都在./node_modules/.bin中。为了总是在这个目录下运行二进制文件,而不是全局可用的二进制文件,如果存在,我建议你把./node_modules/.bin放在你的路径的前面:

export PATH="./node_modules/.bin:$PATH"

如果你把这个放在~/。配置文件,coffee将永远是。/node_modules/.bin/coffee(如果可用的话),否则是/usr/local/bin/coffee(或任何你安装节点模块的前缀)。

你不必再操纵$PATH了!

从npm@5.2.0, npm附带了npx包,它可以让你从本地node_modules/.bin或中央缓存运行命令。

简单地运行:

$ npx [options] <command>[@version] [command-arg]...

默认情况下,npx将检查<命令>是否存在于$PATH或本地项目二进制文件中,并执行它。

当<命令>不在$PATH中时调用npx <命令>将自动从NPM注册表中为你安装一个带有该名称的包,并调用它。当它完成时,安装的包将不会在你的全局包的任何地方,所以你不必担心长期的污染。你可以通过提供——no-install选项来防止这种行为。

对于npm < 5.2.0,您可以通过执行以下命令手动安装npx包:

$ npm install -g npx

我提出了一个我已经开发的新解决方案(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