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

问题描述 投票:12回答:8

我在安装npm时遇到了一个问题

我创建了一个项目,比如项目A

cd ~/projectA
npm install sails

但安装后却找不到sails命令。

我知道它已经成功安装在 ~/projectA/node_modules 目录,但无法找到可执行文件。而且我知道它是安装在 ~/projectA/node_modules/.bin

如何能让我每次进入这个projectA文件夹时,都能自动生成.bin的源码?

我是不是做错了什么?

node.js npm sails.js
8个回答
15
投票

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

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

编辑:已经有一段时间了,但我已经改变了策略,改用npm脚本。在上面的例子中,设置package.json如下。

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

然后你可以用

npm run sails

或带参数

npm run sails -- <args>

13
投票

你应该使用 npm bin 命令来获取当前node 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]

这就避免了相对路径的问题,尤其是当你要在一个会在子目录中调用命令的构建系统中使用这个命令的时候。


2
投票

更强大一点的是。

export PATH=$(npm bin):$PATH

你可以运行它,把它添加到你的shell配置文件中, 或者创建一个别名,比如:

alias snpm='export PATH=$(npm bin):$PATH'

如果你采用别名的方式,一定要用单引号,这样会延迟变量的执行!


1
投票

要在命令行中使用,如 sails generate foo 你需要全局安装npm模块。

npm install -g sails

如果你不想全局安装,你也可以在命令中使用bin的路径。

./node_modules/sails/bin/sails.js generate foo

1
投票

sails的官方说明 (https:/github.combalderdashysails。)建议

用命令行工具安装最新的稳定版。

sudo npm -g install sails

这将在全球范围内安装,并添加到一个目录,如 /usr/local/bin 该在你 $PATH.

但为了回答关于二进制文件位置的一般问题,如果你在本地安装,它们应该放置在 ./node_modules/.bin 目录(所以运行 ./node_modules/.bin/sails ...)


0
投票

如果你不喜欢因为运行一个非全局的npm脚本而弄乱你的PATH--比如你是唯一一个使用它的人--我个人建议使用sh "alias"。

  1. npm 安装(本地)你心爱的包(比如这里的 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
}

我可以运行可执行文件 foo.bin 目录为。

nbin foo

-1
投票

在NPM 5.2+中,可能的变通方法是使用 npx 命令。

npx sails new test-project

这个 问题的类似用例和优雅的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.