首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Npm global没有被使用?

Npm global没有被使用?
EN

Stack Overflow用户
提问于 2018-05-25 20:16:12
回答 5查看 5.5K关注 0票数 18

因此,我之前遇到了一些npm问题,并遵循一些stackoverflow/github问题命令来尝试修复它们。它成功了..。差不多吧。一切都很好,直到最近我意识到我的全局npm包实际上并没有被读取/使用。

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

npm从何处读取/使用

代码语言:javascript
复制
usr/local/lib/node_modules

全局数据库的安装位置

代码语言:javascript
复制
Users/Me/.npm-global/lib/node_modules

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

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

EN

回答 5

Stack Overflow用户

发布于 2018-06-01 12:05:58

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

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

代码语言:javascript
复制
$ npm prefix -g

要将其设置为其他值,请执行以下操作:

代码语言:javascript
复制
npm config set prefix /usr/local/lib/node_modules

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

代码语言:javascript
复制
$ echo $PATH

上面的命令将打印一个以":“分隔的文件夹位置列表,您的shell将检查该位置是否为二进制文件。

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

票数 2
EN

Stack Overflow用户

发布于 2018-06-06 21:33:28

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

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

mkdir ~/.npm-global

  1. 将npm配置为使用新目录路径:

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

  1. 打开或创建~/.profile文件,然后添加以下行:

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

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

source ~/.profile

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

npm install -g <package_name>

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

代码语言:javascript
复制
NPM_CONFIG_PREFIX=~/.npm-global

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

票数 2
EN

Stack Overflow用户

发布于 2018-06-07 20:12:50

您需要尊重加载的顺序。

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')将相对于example-module所在的位置解析path/to/file。后缀路径遵循相同的模块解析语义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50529037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档