如何在node.js中使用一个模块的本地版本。例如,在我的应用程序中,我安装了coffee-script:
npm install coffee-script
这会将其安装在。/node_modules中,而coffee命令则安装在。/node_modules/.bin/coffee中。当我在项目的主文件夹中时,是否有一种方法可以运行此命令?我想我在寻找类似于捆绑执行者的东西。基本上,我想指定一个参与项目的每个人都应该使用的coffee-script版本。
我知道我可以添加-g标志来在全球范围内安装它,这样咖啡在任何地方都可以正常工作,但是如果我想在每个项目中使用不同版本的咖啡呢?
我遇到了同样的问题,我不特别喜欢使用别名(正如常规的建议),如果你也不喜欢它们,那么这里有另一个我使用的解决方案,你首先必须创建一个小的可执行bash脚本,说setenv.sh:
#!/bin/sh
# Add your local node_modules bin to the path
export PATH="$(npm bin):$PATH"
# execute the rest of the command
exec "$@"
然后,您可以使用以下命令使用本地/bin中的任何可执行文件:
./setenv.sh <command>
./setenv.sh 6to5-node server.js
./setenv.sh grunt
如果你在包中使用脚本。json:
...,
scripts: {
'start': './setenv.sh <command>'
}
如果你想保留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