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

15

我在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 下面吗?你所说的“source”是什么意思? - verybadalloc
@verybadalloc 的源代码类似于 Unix 中的点 http://en.wikipedia.org/wiki/Dot_(Unix) 和 http://superuser.com/a/46146 - SHernandez
2
可能是重复的问题:如何在node_modules中使用本地安装的包? - Shahar 'Dawn' Or
8个回答

16

我可以给你一个不太优雅的解决方案,它对我很有效。我只是在我的.bashrc文件中导出了我的路径。

export PATH="$PATH:./node_modules/.bin"

编辑:虽然已经有一段时间了,但我已经改变了我的策略,现在使用npm脚本。在上面的情况下,将package.json设置如下:

"scripts": {
    "sails": "sails"
}

然后您可以使用它运行

npm run sails

或带参数

npm run sails -- <args>

6
我会把 node_modules/.bin 放在前面:export PATH="./node_modules/.bin:$PATH" - Michael_Scharf
使用npm脚本并且关于如何使用参数的提示值得点赞。 - logan

14
你应该使用 npm bin 命令来获取当前 Node.js 可执行文件所在目录的绝对路径。
例如:
➤ 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]

这样可以避免相对路径的问题,特别是如果您将在构建系统中使用此命令,并在子目录中调用该命令时。


3
稍微更加健壮的是:
export PATH=$(npm bin):$PATH

您可以运行它,将其添加到您的 shell 配置文件中,或者创建一个别名,例如:
alias snpm='export PATH=$(npm bin):$PATH'

如果你选择使用别名,请确保使用单引号,这样可以延迟变量的执行!

感谢您的帮助! - Josh Cole

1
要在命令行中使用像sails generate foo这样的命令,您需要全局安装npm模块。
npm install -g sails

如果您不想全局安装,还可以在命令中使用bin路径:
./node_modules/sails/bin/sails.js generate foo

1

sails(https://github.com/balderdashy/sails)的官方说明建议:

使用命令行工具安装最新的稳定版本:

sudo npm -g install sails

这将全局安装并添加到类似于 /usr/local/bin 的目录中,该目录应位于您的 $PATH 中。
但是,如果您进行本地安装,则二进制文件的位置应放置在 ./node_modules/.bin 目录中(因此运行 ./node_modules/.bin/sails ...)。

0
如果您不想为运行非全局 npm 脚本而破坏 PATH(例如,只有您使用它),我个人建议使用 sh“别名”。
  1. 在本地安装你喜欢的包(例如json-diff):

    cd ~ && npm install json-diff
    
  2. 为其创建别名(将其保存在您的~/.xxxxrc文件中):

    alias diffj "\`npm bin\`/json-diff !*"
    

然后,对于比较两个JSON:

diffj old.json new.json

0
在我的~/.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

-1

使用NPM 5.2+版本和npx命令可能有解决方法。

npx sails new test-project

请参考this问题,以获取类似用例和优雅的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接