为多个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.jsLinux/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链接共享目录的模块,生成软链接:
- 进入project_1目录,运行:
npm install ../shared_directory/node_modules/express npm install ../shared_directory/node_modules/body-parser - 这样project_1的node_modules里会生成指向共享目录模块的软链接,你依然可以用
require('express')正常引入,且实际依赖文件只存在于shared_directory。
方案3:使用npm Workspaces(适合多项目统一管理)
调整目录结构为monorepo模式,让所有项目共享根目录的node_modules:
- 在shared_directory、project_1、project_2的同级目录创建package.json:
{ "name": "tutorial-projects", "workspaces": [ "project_1", "project_2" ] } - 把shared_directory里的package.json内容移到根目录的package.json,删除shared_directory后在根目录运行
npm install,所有依赖会安装在根目录的node_modules里。 - 每个项目的app.js依然用
require('express')引入,Node.js会自动向上查找根目录的node_modules。
内容的提问来源于stack exchange,提问作者Zoran
相关产品推荐
相关产品推荐

