NPM:如何获取 ./node_modules/.bin 文件夹?
Posted
技术标签:
【中文标题】NPM:如何获取 ./node_modules/.bin 文件夹?【英文标题】:NPM : how to source ./node_modules/.bin folder? 【发布时间】:2013-08-04 17:15:53 【问题描述】:我在安装 npm 时遇到问题
我创建了一个项目,比如说项目 A
cd ~/projectA
npm install sails
但安装后没有找到sails命令。
我知道它已成功安装在~/projectA/node_modules
目录中。
但无法获取可执行文件。我知道它已安装~/projectA/node_modules/.bin
当我进入这个 projectA 文件夹时,如何自动获取 .bin?
我是不是做错了什么?
【问题讨论】:
您确定它安装在~/projectA/node_modules/.bin
下而不是~/projectA/node_modules/sails/bin
下吗?来源是什么意思?
@verybadalloc 源就像 unix 点 en.wikipedia.org/wiki/Dot_(Unix) 和 superuser.com/a/46146
How to use package installed locally in node_modules?的可能重复
【参考方案1】:
要在sails generate foo
这样的命令行上使用,您需要全局安装 npm 模块。
npm install -g sails
如果您不想全局安装,也可以在命令中使用 bin 的路径:
./node_modules/sails/bin/sails.js generate foo
【讨论】:
【参考方案2】:我可以给你一个不优雅的解决方案,这对我有用。我刚刚在我的 .bashrc 文件中导出了我的路径。
export PATH="$PATH:./node_modules/.bin"
编辑:已经有一段时间了,但我已经改变了使用 npm 脚本的策略。在上述情况下,如下设置 package.json:
"scripts":
"sails": "sails"
然后你可以使用它来运行
npm run sails
或带参数
npm run sails -- <args>
【讨论】:
我会把 node_modules/.bin 放在第一位:export PATH="./node_modules/.bin:$PATH"
赞成使用 npm 脚本,以及如何使用 args 的提示【参考方案3】:
风帆官方说明(https://github.com/balderdashy/sails)建议
使用命令行工具安装最新的稳定版本:
sudo npm -g install sails
这会全局安装并添加到/usr/local/bin
之类的目录中,该目录应该在您的$PATH
中。
但要回答有关二进制文件位置的一般问题,如果您在本地安装,它们应该放在./node_modules/.bin
目录中(所以运行./node_modules/.bin/sails ...
)
【讨论】:
【参考方案4】:您应该使用npm bin
命令获取当前节点 bin 目录的绝对路径。
例如:
➤ lessc
bash: lessc: command not found
➤ npm bin
/home/brice/[...]/node_modules/.bin
➤ export PATH=$(npm bin):$PATH
➤ lessc --version
lessc 1.7.3 (Less Compiler) [javascript]
这避免了相对路径的问题,特别是如果您要在构建系统中使用它,该系统将调用子目录中的命令。
【讨论】:
【参考方案5】:更健壮一点的是:
export PATH=$(npm bin):$PATH
您可以运行它,将其添加到您的 shell 配置文件中,或者创建一个别名,例如:
alias snpm='export PATH=$(npm bin):$PATH'
如果你确实走别名路线,请务必使用单引号,这样会延迟变量的执行!
【讨论】:
感谢您的帮助! ?【参考方案6】:如果你不想为了运行一个非全局的 npm 脚本而弄乱你的 PATH——例如你是唯一使用它的人——我个人建议使用 sh “别名”。
npm 安装(本地)你心爱的包(例如这里的 json-diff)
cd ~ && npm install json-diff
为其命名(将其保存在您的 ~/.xxxxrc 文件中):
alias diffj "\`npm bin\`/json-diff !*"
然后,用于区分 2 个 json:
diffj old.json new.json
【讨论】:
【参考方案7】:在我的~/.bashrc
中,我有以下内容:
function nbin
local dir;
dir=$(npm bin)
if [ -d "$dir" ]; then
( # subshell to not change this shell's $PATH
PATH=$dir:$PATH
eval "$@"
)
else
echo "\"$dir\" is not an npm binary directory." >&1
return 1
fi
然后我可以在.bin
目录中运行可执行文件foo
:
nbin foo
【讨论】:
【参考方案8】:使用 npx
命令的 NPM 5.2+ 的可能解决方法。
npx sails new test-project
请参阅this 问题以了解类似的用例和优雅的解决方案。
【讨论】:
以上是关于NPM:如何获取 ./node_modules/.bin 文件夹?的主要内容,如果未能解决你的问题,请参考以下文章
删除 node_modules 后如何解决 npm install 问题
当您通过 NPM 安装 CSS 框架并排除 node_modules 文件夹时,如何在 VS Code 中使用 CSS 框架自动完成?