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

npm install coffee-script

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

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


当前回答

将此脚本添加到您的.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命令太慢。

其他回答

如果你想让你的PATH变量根据你当前的工作目录正确地更新,把它添加到你的.bashrc等价文件的末尾(或者任何定义PATH的东西之后):

__OLD_PATH=$PATH
function updatePATHForNPM() {
  export PATH=$(npm bin):$__OLD_PATH
}

function node-mode() {
  PROMPT_COMMAND=updatePATHForNPM
}

function node-mode-off() {
  unset PROMPT_COMMAND
  PATH=$__OLD_PATH
}

# Uncomment to enable node-mode by default:
# node-mode

这可能会在每次呈现bash提示符时增加一个短延迟(很可能取决于项目的大小),因此默认情况下禁用它。

您可以在终端中通过分别运行node-mode和node-mode-off来启用和禁用它。

使用npm-run。

自述:

NPM 运行

从node_modules中查找并运行本地可执行文件

任何npm生命周期脚本可用的可执行文件都可用于npm-run。

使用

$ npm install mocha # mocha installed in ./node_modules
$ npm-run mocha test/* # uses locally installed mocha executable 

安装

$ npm install -g npm-run

如果你想保留npm,那么npx应该做你所需要的。


如果切换到yarn (facebook的npm替代品)是你的一个选择,那么你可以调用:

 yarn yourCmd

包中的脚本。Json将优先,如果没有找到,它将在./node_modules/.bin/文件夹中查找。

它还输出它运行的内容:

$ yarn tsc
yarn tsc v0.27.5
$ "/home/philipp/rate-pipeline/node_modules/.bin/tsc"

因此,您不必为package.json中的每个命令设置脚本。


如果你在package.json中有一个定义在.scripts的脚本:

"tsc": "tsc" // each command defined in the scripts will be executed from `./node_modules/.bin/` first

纱线TSC相当于纱线运行TSC或NPM运行TSC:

 yarn tsc
 yarn tsc v0.27.5
 $ tsc

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

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

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

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