npm global 没有被使用?

Posted

技术标签:

【中文标题】npm global 没有被使用?【英文标题】:Npm global not being used? 【发布时间】:2018-11-04 20:14:57 【问题描述】:

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

所以每当我执行 npm -g install xxx 或更新时。它可以更新全局文件夹,但它只是没有被使用。于是我去挖掘了一下,发现了这个。

npm 从哪里读取/使用

usr/local/lib/node_modules

全局安装到哪里

Users/Me/.npm-global/lib/node_modules

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

我该如何解决这个问题?是不是某些链接或个人资料被搞砸了?

【问题讨论】:

请在您的问题中添加npm config listenvalias 命令的输出 env 和 alias 的命令是什么? 它们本身是 bash 命令而不是 npm 啊,我不太清楚如何运行那些 bash 命令。 【参考方案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 已经是。

【讨论】:

当我尝试运行您建议的第二个命令时,它会提示以下错误 npm ERR!用法:npm 错误! npm 配置设置 npm 错误! npm config get [] npm 错误! npm config delete npm 错误! npm 配置列表 [--json] npm 错误! npm 配置编辑 npm 错误! npm set npm ERR! npm get [] npm 错误! npm 错误!别名:c 糟糕,我刚刚修好了 我运行了新命令,没有任何错误,但结果似乎相同,/Users/Kelvin/.npm-packages/bin:/usr/local/bin:/usr/bin :/bin:/usr/sbin:/sbin 这是我之前得到的,对吗? 我明白了 --global 似乎是问题你可以尝试没有它(编辑) 尝试了新命令,这是回显的结果,/Users/Kelvin/.npm-packages/bin:/usr/local/bin:/usr/bin:/bin:/usr /sbin:/sbin 当我检查前缀时,它现在确实指向 usr/local。嗯...想知道这是否意味着它已修复。但是用户/开尔文会一直在回声吗?还在用吗?【参考方案2】:

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

    为全局安装创建一个目录:

    mkdir ~/.npm-global

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

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

    打开或创建一个 ~/.profile 文件并添加以下行:

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

    回到命令行,更新你的系统变量:

    source ~/.profile

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

    npm install -g <package_name>

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

NPM_CONFIG_PREFIX=~/.npm-global

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

【讨论】:

感谢您的回答。但我认为这些首先是导致一些链接问题的几个步骤。但无论如何,在尝试了这个线程中所有不同的答案后,我的 npm 关闭了几天,所以最后我不得不完全删除所有内容并改用 nvm。【参考方案3】:

您需要尊重加载顺序。

Loading from node_modules Folders

如果传递给require() 的模块标识符不是 核心模块,并没有开始 与'/''../''./',则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 位于。后缀路径如下 相同的模块解析语义。

【讨论】:

感谢您的回答。但是在尝试了这个线程中所有不同的答案之后,我的 npm 关闭了几天,所以最后,我不得不完全删除所有内容并改用 nvm【参考方案4】:

对 maxletou 的回答稍作改动,您是否尝试如下设置前缀?

npm config set prefix /usr/local

【讨论】:

【参考方案5】:

我遇到了同样的问题,我所做的是检查前缀 npm config list 并将前缀设置为:prefix="/Users/nameofuser/.npm-global" 并将前缀设置为 prefix="/ usr/local/bin”,输入npm config set prefix/usr/local,一切正常。

【讨论】:

以上是关于npm global 没有被使用?的主要内容,如果未能解决你的问题,请参考以下文章

npm 错误!错误:EACCES:权限被拒绝,访问“/Users/patrikkozak/.npm-global/lib/node_modules/@vue/cli”

npm报错:npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.

nodejs npm install全局安装和本地安装的区别

npm : 无法加载文件 E: odejs ode_global,因为在此系统上禁止 运行脚本。

npm : 无法加载文件 E: odejs ode_global,因为在此系统上禁止 运行脚本。

nodejs npm install全局安装和本地安装的区别