Node.js中TypeScript编译后绝对路径模块找不到问题求助
Node.js TypeScript编译后绝对路径模块找不到的解决方案
问题描述
在Node.js环境下使用TypeScript开发,已在tsconfig.json中配置绝对路径,开发阶段导入'db'模块正常,但编译生成dist目录后,运行时出现Cannot find module 'db'错误,需要解决该问题以保证编译后仍可正常使用绝对路径。
相关配置与代码
tsconfig.json
{ "extends": "@tsconfig/node16/tsconfig.json", "compilerOptions": { "preserveConstEnums": true, "baseUrl": "src", "rootDir": "src", "outDir": "dist" }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "**/*.spec.ts"] }
src/index.ts
import express from "express"; import dotenv from "dotenv"; import connectDB from "db"; dotenv.config(); const app = express(); const PORT = process.env.PORT || 3001; app.listen(PORT, () => console.log(`server run on port ${PORT}`)); connectDB(app, PORT);
编译后的dist/index.js
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = __importDefault(require("express")); const dotenv_1 = __importDefault(require("dotenv")); const db_1 = __importDefault(require("db")); dotenv_1.default.config(); const app = (0, express_1.default)(); const PORT = process.env.PORT || 3001; app.listen(PORT, () => console.log(`server run on port ${PORT}`)); (0, db_1.default)(app, PORT);
解决方案
方法1:用tsconfig-paths在运行时识别绝对路径
TypeScript编译不会自动将绝对路径转为相对路径,tsconfig-paths可以让Node.js在运行时读取tsconfig.json的路径配置,识别绝对路径模块。
- 安装依赖:
npm install tsconfig-paths --save-dev
- 修改
package.json的启动脚本:
{ "scripts": { "start": "node -r tsconfig-paths/register dist/index.js" } }
方法2:用tsc-alias在编译时转换路径
tsc-alias会在TypeScript编译完成后,自动将dist目录中文件的绝对路径替换为相对路径,让Node.js直接识别。
- 安装依赖:
npm install tsc-alias --save-dev
- 修改
package.json的编译脚本:
{ "scripts": { "build": "tsc && tsc-alias" } }
方法3:通过package.json的exports字段配置模块映射
如果db模块对应src/db/index.ts,可在项目根目录的package.json中添加exports字段,直接映射模块路径:
{ "exports": { "db": "./dist/db/index.js" } }
注意:需保证编译后的db模块路径正确,模块结构变动时需同步更新该配置。
内容的提问来源于stack exchange,提问作者Ali Mohamadi
相关产品推荐
相关产品推荐

