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

如何在NodeJS中使用项目根目录路径而非相对路径导入JS文件?

在NodeJS中使用项目根目录路径导入JS文件的解决方案

问题描述

如何在NodeJS中使用项目根目录路径导入JavaScript文件?(而非相对路径)

换句话说,团队正尝试从语法风格A转换为语法风格B:

语法风格A

const source = require('../../../../../../source.js');

语法风格B

const source = require('src/source.js'); // "src"是项目根目录的直接子文件夹

查阅了大量相关内容,但没有一个能满足项目需求……

项目需求

  • 需求1:不使用外部包(如Babel.js或Webpack),磁盘空间有限,且无法通过npm install安装任何工具。
  • 需求2:JavaScript文件应能使用“项目根目录”路径导入其他JS文件,而非相对路径(避免冗长的相对路径,如../../../../../../../script.js,这类路径难以管理)。
  • 需求3:在源代码中右键点击导入的类,应弹出包含“转到定义”选项的上下文菜单(可直接跳转到导入文件);在IDE中移动JS文件时应自动更新所有引用,可使用任意IDE。
  • 需求4:采用统一的导入方式,使用NodeJS的require关键字导入(而非JavaScript的import关键字)。

项目结构

以下是项目设置,package.json由WebStorm生成,未做修改。

Project_Root
├─ src
│    └── a1
│       └── a2
│           └── a3
│               └── Worker.js
├── subFolder1
│    └── SubWorker.js
├─ main.js
└─ package.json

代码示例

main.js

const Worker = require('./src/a1/a2/a3/Worker.js');
Worker.doWork();

Worker.js

// 如果替换为项目根目录路径,例如:
//    const SubWorker = require('src/subFolder1/SubWorker.js');
// 脚本会报错:"Error: Cannot find module './src/subFolder1/SubWorker.js'."

const SubWorker = require('../../../subFolder1/SubWorker.js');

module.exports =
class Worker { 
        static doWork() {
                console.log("doing work");
                SubWorker.doMoreWork();
        }
}

SubWorker.js

module.exports =
class SubWorker {
        static doMoreWork() {
                console.log("doing more work");
        }
};

已尝试的方案

方案1:path.resolve

尝试了相对路径转绝对路径的方案,程序报错:Error: Cannot find module './src/subFolder1/SubWorker.js',在WebStorm 2022.3.2和VS Code 1.76.2中均可复现。

方案2:app-module-path

使用app-module-path满足了部分需求,但程序无法运行,报错:Error: Cannot find module 'src/subFolder1/SubWorker.js',在WebStorm 2022.3.2和VS Code 1.76.2中均可复现。

方案3:动态路径拼接

尝试了动态拼接根路径的方法,代码如下,但失败情况与方案1相同:

const rootPath = 'src/subFolder1';
const SubWorker = require(`${rootPath}/SubWorker.js`);

方案4:子路径导入

该方案使用import而非require,违反需求4,不符合要求。

预期结果

NodeJS作为主流后端语言,期望IDE能提供完善的导入支持,从项目根目录引用源文件应该是无需Babel.js或Webpack就能实现的简单操作,目前不清楚问题出在哪,已遵循以下标准实践:

  • 使用了最新版本的主流NodeJS IDE(WebStorm 2022.3.2和VS Code 1.76.2)
  • 通过WebStorm的“创建新NodeJS项目”向导创建项目
  • 使用最新版本的NodeJS(v18.15.0,运行在Windows 10 v21H2系统上)

相关未解决内容

以下Stack Overflow帖子相关,但未解决本问题:

  • NodeJS - Relative File Paths:失败情况与方案1相同
  • Project root based relative paths for NodeJS modules:使用import而非require,违反需求4
  • is it possible to get rid of the relative paths on imports?:置顶回答使用Babel.js,违反需求1
  • How to import a JavaScript file to another JavaScript file:未涉及相对路径与项目根目录路径的对比问题
  • How to use absolute/dynamic paths in NodeJs:使用import而非require,违反需求4
  • how to use absolute paths instead of relative paths in React or Next.js?:未使用React或Next.js,不适用
  • JavaScript Import file by absolute path:使用import而非require,违反需求4
  • javascript file with absolute file path:讨论的是客户端浏览器脚本,本问题是服务器端NodeJS脚本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:17:53