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

npm install coffee-script

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

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


当前回答

更新:如果你在最近的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

其他回答

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

您也可以使用direnv并仅在您的工作文件夹中更改$PATH变量。

$ cat .envrc
> export PATH=$(npm bin):$PATH

我不喜欢依赖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用户,这对我来说是有效的:

// First set some variable - i.e. replace is with "xo"
D:\project\root> set xo="./node_modules/.bin/"

// Next, work with it
D:\project\root> %xo%/bower install

祝你好运。

我一直使用与@guneysus相同的方法来解决这个问题,即在包中创建一个脚本。Json文件,并使用它运行NPM run script-name。

然而,最近几个月我一直在使用npx,我很喜欢它。

例如,我下载了一个Angular项目,但我不想全局安装Angular CLI。所以,在安装了npx之后,不用使用angular cli的全局命令(如果我已经安装了它),就像这样:

ng serve

我可以从控制台这样做:

npx ng serve

这是我写的一篇关于NPX的文章,更深入地讨论了它。