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 文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

NPM:如何使用.node_modules.bin文件夹?

删除 node_modules 后如何解决 npm install 问题

为自定义模块使用 node_modules 文件夹

当您通过 NPM 安装 CSS 框架并排除 node_modules 文件夹时,如何在 VS Code 中使用 CSS 框架自动完成?

如何查看 npm 包的大小?

npm 初始化 及 删除 node_modules