You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为多个Node.js项目配置共享依赖目录的问题

解决Node.js多项目共享node_modules的模块找不到问题

错误原因

你直接用../shared_directory/express作为require路径是错误的——express模块实际存放在../shared_directory/node_modules/express,而且Node.js的require()默认会在node_modules目录下查找模块,不需要直接指定模块的完整路径。

可行解决方案

方案1:设置NODE_PATH环境变量

告诉Node.js额外的模块查找目录,让它能找到共享的node_modules:

  • 临时生效(终端运行):
    Windows:

    set NODE_PATH=../shared_directory/node_modules && node app.js
    

    Linux/macOS:

    NODE_PATH=../shared_directory/node_modules node app.js
    
  • 永久生效(项目脚本):
    先在project_1目录运行npm init -y生成package.json,再修改为:

    {
      "scripts": {
        "start": "NODE_PATH=../shared_directory/node_modules node app.js"
      }
    }
    

    之后运行npm start即可加载共享模块。

    同时修改app.js里的require语句为正常写法:

    const express = require('express');
    const bodyParser = require('body-parser');
    

方案2:创建模块软链接

在每个项目里通过npm链接共享目录的模块,生成软链接:

  1. 进入project_1目录,运行:
    npm install ../shared_directory/node_modules/express
    npm install ../shared_directory/node_modules/body-parser
    
  2. 这样project_1的node_modules里会生成指向共享目录模块的软链接,你依然可以用require('express')正常引入,且实际依赖文件只存在于shared_directory。

方案3:使用npm Workspaces(适合多项目统一管理)

调整目录结构为monorepo模式,让所有项目共享根目录的node_modules:

  1. 在shared_directory、project_1、project_2的同级目录创建package.json:
    {
      "name": "tutorial-projects",
      "workspaces": [
        "project_1",
        "project_2"
      ]
    }
    
  2. 把shared_directory里的package.json内容移到根目录的package.json,删除shared_directory后在根目录运行npm install,所有依赖会安装在根目录的node_modules里。
  3. 每个项目的app.js依然用require('express')引入,Node.js会自动向上查找根目录的node_modules。

内容的提问来源于stack exchange,提问作者Zoran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:00:04