node_modules正确安装位置及require引入模块找不到问题排查
Node.js require加载tableexport模块失败排查
问题表现
- 已通过npm安装依赖,可正常加载
common.js模块 - 执行如下代码时提示找不到对应模块:
const tbl = require("tableexport");
- 项目对外访问URL为
domain.com/main/project,当前认为node_modules应存放在project目录下 - 已编写
package.json,并将tableexport@^5.2.0加入依赖项,所有依赖均通过npm安装
核心误区
Node.js的模块解析逻辑和web访问URL路径没有任何关联,不会根据域名访问路径查找本地node_modules文件夹。 模块查找固定遵循以下规则:从当前运行的JS文件所在磁盘目录开始,逐级向上遍历父级目录查找node_modules文件夹,直到磁盘根目录;同时会参考执行node命令时所处的工作目录。
根据给出的实际磁盘文件结构,依赖实际安装位置是adex/clientsSite/node_modules,package.json也存放在adex/clientsSite目录下,这个目录才是实际的项目根目录,和web访问路径对应的project目录不是同一个位置,Node从project目录开始查找模块时,自然找不到存放在clientsSite下的tableexport包。
修复步骤
- 将编写的包含
require("tableexport")逻辑的JS脚本,移动到和package.json同级的adex/clientsSite目录下,不要放在web路径对应的project目录中 - 执行所有node、npm相关命令前,先切换到
adex/clientsSite这个实际项目根目录:
# 进入项目根目录(替换为本地的实际磁盘路径) cd /your/local/path/adex/clientsSite # 重新安装依赖,确认依赖安装位置正确 npm install # 验证tableexport是否能被正常识别 npm ls tableexport # 执行项目入口文件,比如package.json中配置的main为index.js node index.js
- 如果因为部署要求必须把执行脚本放在
project目录下,可以在project目录下重新执行npm init -y和npm install tableexport common.js,把依赖装到project目录下的node_modules中,Node就可以正常找到模块。
内容的提问来源于stack exchange,提问作者Floyd Resler
相关产品推荐
相关产品推荐

