关于NODE_PATH,node全局package的使用

在开发和运行 Node.js 应用程序时,我们经常需要使用到各种第三方的包和模块。一种常见的方式是将这些包安装在每个项目的本地目录中。然而,有时我们可能希望在多个项目之间共享某些通用的包或模块,以提高重复利用代码的效率。

Node.js 提供了一种机制来解决这个问题,即全局安装包。全局包是指一些在全局范围内安装的包,这意味着它们可以在任何项目中使用,而不仅仅是某个特定的项目。在全局包安装之后,我们可以通过命令行或脚本直接访问它们。

然而,使用全局包存在一个常见的问题,即如何确保在不同的项目中找到正确的包。默认情况下,Node.js 将只查找本地项目目录中的包,而不会查找全局安装的包。

NODE_PATH 是一个环境变量,用于指定 Node.js 在模块解析过程中要搜索的目录。通过设置 NODE_PATH 变量,我们可以告诉 Node.js 除了默认的本地目录之外还要搜索哪些目录。

至于为什么配置NODE_PATH全局变量呢?

因为我们在部署的时候可以轻松部署js工程,node_modules拷贝过去或者在部署服务器安装都非常不方便,NODE_PATH配置以后,就不用在通过项目根目录文件夹再次安装,而且通过NODE_PATH可以做到多个项目模块复用,节省资源

为什么不是--global?

NODE_PATH--global 安装的包有几个区别:

  1. 作用范围NODE_PATH 可以让你在项目中引用位于不同位置的模块,而 --global 安装的包则是全局可用的,可以在任何项目中使用。
  2. 安装位置 :使用 NODE_PATH,你可以将 node_modules 文件夹放在特定位置,并通过设置环境变量进行引用。而 --global 安装的包会被安装到全局的 node_modules 文件夹中。
  3. 可访问性--global 安装的包可以在命令行中直接调用,无论当前所在的项目位置如何。而使用 NODE_PATH 引用的包需要在项目代码中显式地引入。

总结起来,NODE_PATH 更适合于在特定项目中引用特定位置的模块,而 --global 安装的包适用于全局使用,并且可以从命令行直接调用。具体使用哪种方法取决于你的需求和使用场景。需要注意的是,全局安装的包对于团队协作和项目管理可能会带来一些问题,因为不同项目可能依赖于不同的包版本,而全局安装只能有一个版本。

NODE_PATH 和 --global 安装的包有不同的优先级

  • NODE_PATH 环境变量可以用于指定一个或多个目录,Node.js 在查找模块时会将这些目录包含在内。如果一个模块无法在当前目录或内置模块中找到,Node.js 会按照 NODE_PATH 中定义的顺序逐个查找指定的目录。因此,如果同名模块在 NODE_PATH 的目录中出现,它们将会被优先加载。
  • --global 安装的包是全局安装的,意味着这些包可以在任何项目中被使用,而不必再次安装。全局安装的包会被放置在系统的全局模块目录中(例如在 Windows 上是 C:\Users\username\AppData\Roaming\npm)。当你在一个项目中引入一个模块时,Node.js 会首先查找该项目的本地依赖,如果找不到,它将会去全局模块目录中查找。

综上所述,如果一个模块既在 NODE_PATH 对应的目录中存在,又被全局安装了,那么 NODE_PATH 的优先级会更高,这意味着它将会被优先加载。只有当没有找到位于 NODE_PATH 目录中的模块时,Node.js 才会去全局模块目录中查找。

1.选定一个全局安装变量的位置

首先我们新建一个文件夹,例如我们在D盘创建新文件夹,文件夹名字为global-node-path 文件路径为

vbnet 复制代码
D:\global-node-path
2.初始化package.json

在任务栏输入cmd,在当前文件夹输入

bash 复制代码
npm init --yes
3.先安装一个package

我们这里用axios这个包为例,输入

npm install axios
4.配置环境变量

我们在"系统属性"=> "高级" => "环境变量",在WINDOWS的环境变量,配置NODE_PATH变量,变量值是全局node_modules的地址。 新建环境变量值 环境变量名称

NODE_PATH

环境变量值

vbnet 复制代码
D:\global-node-path\node_modules
4.必须重启电脑,否则配置不会生效
5.测试时候成功配置

在电脑任意一个地方建一个js文件,我们随意命名为1.js

ini 复制代码
// 1.js
const axios  = require('axios');
console.log(axios);

运行1.js这个文件

node 1.js

结果如下:

说明成功找到包路径

6.补充,linux的配置方式
ini 复制代码
export PATH=$PATH: # 将 /usr/bin 追加到 PATH 变量中
export NODE_PATH="/global-node-path/node_modules" 
7.补充,差异性问题

如果 项目A 使用了,express的3.x版本,项目B 使用了 express的4.x版本,那这种情况该怎么办呢?

可以将 NODE_PATH 指定的位置中存放 express的4.x版本,再将 项目B的 node_modules 目录中放置 3.x 版本。

这样就解决了模块版本差异性问题。

相关推荐
逐·風4 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫4 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦5 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子5 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山6 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享6 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
清灵xmf8 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询
大佩梨8 小时前
VUE+Vite之环境文件配置及使用环境变量
前端
GDAL8 小时前
npm入门教程1:npm简介
前端·npm·node.js
小白白一枚1119 小时前
css实现div被图片撑开
前端·css