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

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的模块解析逻辑:

  1. TypeScript配置:打开你的tsconfig.json(如果用TS的话),确认moduleResolution字段设置的是node——这是Node.js默认的模块解析规则,能避免很多路径问题:
    {
      "compilerOptions": {
        "moduleResolution": "node",
        // 其他编译配置...
      }
    }
    
  2. 编译与运行流程:确保你在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:48:30