因此,我之前遇到了一些npm问题,并遵循一些stackoverflow/github问题命令来尝试修复它们。它成功了..。差不多吧。一切都很好,直到最近我意识到我的全局npm包实际上并没有被读取/使用。
因此,每当我执行npm -g时,请安装xxx或更新。它可以更新全局文件夹,但它只是没有被使用。所以我去挖掘了一下,发现了这个。
npm从何处读取/使用
usr/local/lib/node_modules全局数据库的安装位置
Users/Me/.npm-global/lib/node_modules因此,每当我对我的模块和东西进行-g检查时,一切都是好的和更新的,但是当我实际尝试运行任何东西时,npm命令使用旧文件夹中的那个文件夹。所以基本上我不能使用-g更新或安装任何东西。并且没有任何内容会进入实际使用的旧文件夹中。
我该如何解决这个问题?是不是某些链接或配置文件被搞砸了?
发布于 2018-06-01 12:05:58
看起来这是关于您的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文件夹已经是列表的一部分。
发布于 2018-06-06 21:33:28
以下是为当前登录用户更改全局npm安装的主目录的步骤:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH
source ~/.profile
npm install -g <package_name>
您可以使用相应的ENV变量来代替步骤1-5 (例如,如果您不想修改~/.profile):
NPM_CONFIG_PREFIX=~/.npm-global如果使用sudo安装npm模块,上述配置将不起作用,因为它将遵循为root用户设置的配置。
发布于 2018-06-07 20:12:50
您需要尊重加载的顺序。
Loading from
node_modulesFolders如果传递给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。后缀路径遵循相同的模块解析语义。
https://stackoverflow.com/questions/50529037
复制相似问题