Node.js 全局节点模块安装不正确。找不到命令

Node.js 全局节点模块安装不正确。找不到命令,node.js,terminal,installation,npm,Node.js,Terminal,Installation,Npm,我在安装全局节点模块时遇到了一个问题,我在网上找到的所有信息都表明,解决方案只是添加了-g。这不是问题所在。我认为这是一个链接问题或错误的目录问题 以下是我的工作: $ npm install -g express npm http GET https://registry.npmjs.org/express npm http 304 https://registry.npmjs.org/express npm http GET https://registry.npmjs.org/range-

我在安装全局节点模块时遇到了一个问题,我在网上找到的所有信息都表明,解决方案只是添加了-g。这不是问题所在。我认为这是一个链接问题或错误的目录问题

以下是我的工作:

$ npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/mkdirp/0.3.3
...downloads correctly

$ express myapp
bash: express: command not found
但是,当我运行direct link location以表达时,它会起作用:

   $ /usr/local/share/npm/bin/express myapp

   create : myapp
   create : myapp/package.json
   create : myapp/app.js
... Builds app correctly
其中,模块为:

$ which node
/usr/local/bin/node
$ node -pe process.execPath
/usr/local/Cellar/node/0.8.20/bin/node
$ npm link express
/Users/bentonrr/Development/Personal/node_modules/express -> /usr/local/share/npm/lib/node_modules/express
在我的.bash_配置文件中,我有:

export PATH=/usr/local/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules:/usr/local/lib/node
我是否需要更改节点环境以下载到正确的文件夹?有什么链接不正确吗?我迷路了

谢谢

其他规格:

$ node --version
v0.8.20
$ npm --version
1.2.11
$ brew --version
0.9.4
OSX Version 10.8.2
$(npm get prefix)/bin
添加到
路径中(例如,在
.bashrc
中),如下所示:

echo“导出路径=$PATH:$(npm get prefix)/bin”>>~/.bashrc

有关更多信息,请参阅npm帮助npm

全局模式: npm将软件包安装到prefix/lib/node\处的安装前缀中。模块和bin安装在prefix/bin中


您可以使用
npm get prefix
npm config list | grep prefix

找到安装前缀。这可能意味着您的节点安装前缀不是您所期望的

您可以这样设置:

npm配置集前缀/usr/local

然后再次尝试运行
npm install-g
,它应该会成功。在mac电脑上为我工作,解决方案来自此网站:


编辑:请注意,我刚刚在我正在安装的一台新Mac电脑上再次遇到了这个问题,我也必须完成这个过程。

我从来没有通过sudo安装过任何npm东西!我有自己的理由,但我只是尽量让事情简单,以用户为基础,因为这是一个用户开发世界,不是每个人都有root访问权限,root/sudo安装这样的东西似乎一开始就把事情搞得一团糟。毕竟,所有开发人员都应该能够遵循这些说明,而不仅仅是拥有特权的sudo用户

此特定系统是通过SSH访问的RHEL7:

通常需要不同版本的节点,所以我使用NVM

因此,我可以向您展示一个使用NVM、NPM和不使用root的节点路径的
-g
全局安装的工作示例

.npm包
设置前缀(如果尚未设置)。(注意,这是连字符,不是下划线)

这几乎涵盖了所有的路径。例如,如果您像这样安装gulp
npm安装-g gulp
it符号链接在
~/.npm packages/bin
(请注意,这是连字符,不是下划线)。(无需
gulp cli
gulp cl


您几乎可以替换/注释掉所有其他节点路径导出。您可以安全地将此路径信息放在您已有的任何其他路径信息之下,而不会覆盖这些内容

我遇到的问题是缺少二进制文件,因为我的主目录中的用户特定的.npmrc文件的
bin links
设置为
false
,尽管
默认值为true

万一这是您的问题,请检查您的.npmrc文件中是否没有将其设置为false


然后重新安装所有模块将在
前缀处创建二进制文件,以便您的
路径可以看到它们。

我的npm也找不到全局包。我按照布拉德·帕克斯的建议做了:

npm config set prefix /usr/local
然后我得到了一个EACCES权限错误(不要使用
sudo npm install-g
),并通过官方npm文档修复了它:

  • 在命令行的主目录中,为全局安装创建一个目录:
  • 配置npm以使用新的目录路径:
  • 在首选文本编辑器中,打开或创建~/.profile文件并添加此行:
  • 在命令行上,更新系统变量:
  • 然后全局安装一个包并测试它!例如:

  • 在我的例子中,NODE_PATH环境变量为空。检查它是否为空-

    echo $NODE_PATH
    
    如果节点路径为空。然后更改~/.bash\u配置文件并添加节点\u路径

    nano ~/.bash_profile
    export NODE_PATH=`npm root -g`
    source ~/.bash_profile
    
    现在再次安装npm模块,并检查路径
    npm root-g

  • 将以下行添加到您的
    ~/.bash\u配置文件中

    export PATH="$HOME/.npm/bin:$PATH"
    
  • 加载bash配置文件

    bash -l
    
  • 适用于Windows用户


    将其添加到路径中:%AppData%\npm“

    检查全局节点模块的二进制文件夹,并将其添加到$path中

    npm list -g | head -1
    
    如果使用nodenv,则无论何时安装全局节点版本,路径都将更改。像这样添加路径解决了我的问题

    "$HOME/.nodenv/versions/$(nodenv global)/bin"
    
    用于将路径添加到zsh的快捷方式

    $ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc
    

    这是因为/usr/local/share/npm/bin/不在shell的$PATH中。这就是为什么shell找不到
    express
    。我添加了:export PATH=/usr/local/share/npm/bin:$PATH到我的.bash_配置文件,它成功了。谢谢添加一个答案,这样我就可以接受它并进行投票。在我的例子中,通过OSX上的Cell安装NPM,我在.bash_配置文件中设置的
    bin
    路径是:
    export path=$path:/usr/local/Cell/node/10.5.0/bin
    我正在使用
    nodenv
    ,很可能有更好的方法来解决我的例子中的这个问题。然而,您的解决方案起到了快速而肮脏的修复作用!然后,我将前缀切换回
    nodenv
    前缀,并能够从
    /usr/local路径运行包。谢谢我已经花了几个月的时间来解决这个问题,这是我见过的唯一一个能帮我解决这个问题的答案!太谢谢你了,这对我还是不起作用。我能做什么?我想在win7上安装全局typescript。我尝试了很多解决方案,但只有这一个为我做到了。由于某种原因,我的前缀被设置为
    /Users/(username)/.npm global
    ,尽管我重新安装了所有内容。我也在Mac上。如果您通过Cell安装了Node,这会使您崩溃。对于使用nvm的非sudo用户,路径不应该是.bash_配置文件或.bashrc的
    $HOME/.npm
    ?我使用nvm,所以要确保im不是cr
    echo $NODE_PATH
    
    nano ~/.bash_profile
    export NODE_PATH=`npm root -g`
    source ~/.bash_profile
    
    export PATH="$HOME/.npm/bin:$PATH"
    
    bash -l
    
    npm list -g | head -1
    
    "$HOME/.nodenv/versions/$(nodenv global)/bin"
    
    $ echo 'export PATH="$HOME/.nodenv/versions/$(nodenv global)/bin"' >> ~/.zshrc