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 list
、env
和alias
命令的输出
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 安装主目录的步骤:
为全局安装创建一个目录:
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,因为在此系统上禁止 运行脚本。