Npm全球没被使用?

时间:2018-05-25 12:16:12

标签: node.js npm

所以我之前遇到过一些npm问题,并遵循一些stackoverflow / github问题命令来尝试修复它们。哪个有用......有点儿。直到最近,当我意识到我的全局npm软件包实际上没有被读取/使用时,一切都很好。

所以,每当我做一个npm -g install xxx或更新。它更新了全局文件夹,但它没有被使用。所以我去挖了一点就找到了。

npm正在阅读/使用

usr/local/lib/node_modules

全局安装到

的位置
Users/Me/.npm-global/lib/node_modules

所以每当我对我的模块和东西进行-g检查时,一切都很好并且更新了,但是当我实际尝试运行任何东西时,npm命令使用旧文件夹中的那个。所以基本上我不能使用-g更新或安装任何东西。没有任何东西进入旧文件夹,这是实际使用的文件夹。

我该如何解决这个问题?某些链接或配置文件被搞砸了吗?

4 个答案:

答案 0 :(得分:1)

看起来这是关于你的npm前缀配置。 全局前缀是npm将安装全局包的文件夹。

首先,我将运行以下命令来获取全局前缀(https://docs.npmjs.com/cli/prefix

的值
$ npm prefix -g

将其设置为其他值:

npm config set prefix /usr/local/lib/node_modules

这是针对全局包的位置,现在您需要检查终端PATH变量是否正在检查此文件夹中的二进制文件。

$ echo $PATH

上面的命令将打印一个“:”分隔的文件夹位置列表,shell会检查二进制文件。

你的全局npm前缀位置应该是该列表的一部分,从你的问题我假设这个文件夹/ usr / local / lib / node_modules已经是。

答案 1 :(得分:0)

以下是为当前登录用户更改全局npm安装的主目录的步骤:

  1. 为全局安装创建目录:

    mkdir ~/.npm-global

  2. 配置npm以使用新目录路径:

    npm config set prefix '~/.npm-global'

  3. 打开或创建〜/ .profile文件并添加以下行:

    export PATH=~/.npm-global/bin:$PATH

  4. 返回命令行,更新系统变量:

    source ~/.profile

  5. 测试:全局下载包而不使用sudo。

    npm install -g <package_name>

  6. 代替步骤1-5,您可以使用相应的ENV变量(例如,如果您不想修改〜/ .profile):

    NPM_CONFIG_PREFIX=~/.npm-global
    

    如果您使用sudo安装npm模块,则上述配置将无效,因为它将遵循为root用户设置的配置。

答案 2 :(得分:0)

您需要尊重负载的顺序。

  

Loading from node_modules Folders

     

如果传递给require()的模块标识符不是a   核心模块,并没有开始   使用'/''../'或   './',然后Node.js从父目录开始   当前模块,并添加/node_modules,和   尝试从该位置加载模块。节点不会附加   node_modules到已经结束的路径   node_modules

如果在那里找不到它,那么它   移动到父目录,依此类推,直到文件的根目录   系统已到达。

例如,如果文件位于   '/home/ry/projects/foo.js'打来电话   require('bar.js'),然后Node.js会查找   以下位置,按此顺序:

      
  • /home/ry/projects/node_modules/bar.js
  •   
  • /home/ry/node_modules/bar.js
  •   
  • /home/node_modules/bar.js
  •   
  • /node_modules/bar.js

这允许   用于本地化其依赖项的程序,以便它们不会   碰撞。

可能需要特定的文件或子模块   通过在模块之后包含路径后缀来与模块一起分发   名称。例如   require('example-module/path/to/file')会   解决path/to/file相对于哪里   找到example-module。后缀路径跟随   相同的模块解析语义。

答案 3 :(得分:0)

对maxletou的答案进行更改,您是否尝试按如下方式设置前缀?

npm config set prefix /usr/local