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

npm install coffee-script

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

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


当前回答

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

向包的脚本部分添加简单的一行。Json,你可以运行本地NPM命令像

pm网络包装

package.json

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "webpack": "webpack"
  },
  "devDependencies": {
    "webpack": "^4.1.1",
    "webpack-cli": "^2.0.11"
  }
}

其他回答

对于Windows,使用以下命令:

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

更新:正如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

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

$ $(npm bin)/<binary-name> [args]

e.g.

$ $(npm bin)/bower install

相同的@常规的接受方案,但鱼壳味

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

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