【问题标题】:NPM : how to source ./node_modules/.bin folder?NPM:如何获取 ./node_modules/.bin 文件夹?
【发布时间】:2013-08-04 17:15:53
【问题描述】:

我在安装 npm 时遇到问题

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

cd ~/projectA
npm install sails

但安装后没有找到sails命令。

我知道它已成功安装在~/projectA/node_modules 目录中。 但无法获取可执行文件。我知道它已安装~/projectA/node_modules/.bin

当我进入这个 projectA 文件夹时,如何自动获取 .bin?

我是不是做错了什么?

【问题讨论】:

标签: node.js npm sails.js


【解决方案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 “别名”。

        1. npm 安装(本地)你心爱的包(例如这里的 json-diff)

          cd ~ && npm install json-diff
          
        2. 为其命名(将其保存在您的 ~/.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 问题以了解类似的用例和优雅的解决方案。

            【讨论】:

              猜你喜欢
              • 2018-04-01
              • 1970-01-01
              • 2013-12-24
              • 2016-10-29
              • 1970-01-01
              • 1970-01-01
              • 2019-04-11
              • 2016-09-05
              • 2022-01-15
              相关资源
              最近更新 更多