NodeJS自定义模块Linux下找不到,Windows运行正常问题
解决Linux下自定义模块找不到的问题(Windows运行正常)
这问题我碰到过好多次,跨Windows和Linux开发最容易栽在这类细节上。结合你的项目结构和代码,我给你梳理下排查方向和解决方案:
最可能的原因:文件名大小写不匹配
Windows的文件系统是大小写不敏感的,比如你写../utils/BaseValidator,哪怕实际文件是basevalidator.ts,Windows也能正常找到;但Linux是严格区分大小写的,只要字母大小写对不上,直接就报模块找不到。
排查步骤:
- 登录Linux服务器,进到你的
app/utils目录,执行ls -l看看实际文件名是不是严格的BaseValidator.ts,有没有写成basevalidator.ts、Basevalidator.ts这类大小写不一致的情况。 - 如果发现不匹配,要么修改文件名和代码里的导入路径完全一致,要么调整导入路径匹配实际文件名(推荐前者,保持命名规范)。
其次检查模块解析配置
如果大小写没问题,那得看看TypeScript或Node.js的模块解析逻辑:
- TypeScript配置:打开你的
tsconfig.json(如果用TS的话),确认moduleResolution字段设置的是node——这是Node.js默认的模块解析规则,能避免很多路径问题:{ "compilerOptions": { "moduleResolution": "node", // 其他编译配置... } } - 编译与运行流程:确保你在Linux下是先编译TS文件(比如执行
tsc生成dist目录的文件),再运行node dist/server.js;如果直接跑.ts文件,要确认ts-node这类工具安装正确,且没有路径配置问题。
环境变量配置差异(你提到的NO...推测是NODE_PATH)
Windows和Linux设置环境变量的逻辑不一样,比如NODE_PATH:
- Linux下临时设置要这么写:
export NODE_PATH=./app:$NODE_PATH(把你的app目录加到模块搜索路径里),要注意路径是相对项目根目录(server.js所在目录)的正确路径。 - 如果你是把
NODE_PATH写到配置文件里(比如~/.bashrc),要记得执行source ~/.bashrc让配置生效,否则新启动的终端不会加载这个变量。
最后检查Linux文件权限
有时候Linux下文件没有读取权限,Node.js也会报模块找不到。你可以给utils目录下的文件加读取权限:
chmod +r app/utils/BaseValidator.ts
或者直接给整个app目录递归加权限:
chmod -R +r app/
按这个顺序排查,基本能解决问题。
内容的提问来源于stack exchange,提问作者Baga
相关产品推荐
相关产品推荐

