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

npm install coffee-script

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

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


当前回答

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

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

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

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

其他回答

使用npm run[-script] <脚本名>

使用npm将bin包安装到本地的。/node_modules目录后,修改package。Json添加<脚本名称>,如下所示:

$ 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不添加脚本块也能正常工作,那就太好了。

对于Windows,使用以下命令:

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

ZXC就像nodejs的“bundle exec”。类似于使用PATH=$(npm bin):$PATH:

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

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

将此脚本添加到您的.bashrc。然后你可以叫咖啡或当地的任何东西。这对你的笔记本电脑很方便,但不要在你的服务器上使用。

DEFAULT_PATH=$PATH;

add_local_node_modules_to_path(){
  NODE_MODULES='./node_modules/.bin';
  if [ -d $NODE_MODULES ]; then
    PATH=$DEFAULT_PATH:$NODE_MODULES;
  else
    PATH=$DEFAULT_PATH;
  fi
}

cd () {
  builtin cd "$@";
  add_local_node_modules_to_path;
}

add_local_node_modules_to_path;

注意:这个脚本使cd命令的别名,在每次调用cd之后,它会检查node_modules/.bin并将其添加到$PATH中。

注2:你可以把第三行改为NODE_MODULES=$(npm bin);但这将使cd命令太慢。