首页 > 解决方案 > TypeScript 导入模块路径

问题描述

我有以下文件:

myProjectRoot/src/server.ts

在这里面它有:

import testRouter from 'module/lib';

我有一个库,它在以下位置导出默认值:

myProjectRoot/src/module/lib.ts

我的myProjectRoot/tsconfig.json文件:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6",
        "lib": [
            "es6"
        ],
        "sourceMap": true,
        "baseUrl": "./src/"
    },
    "exclude": [
        "node_modules"
    ]
}

我得到错误:[ERROR] 15:50:42 Error: Cannot find module 'module/lib'

标签: typescript

解决方案


您在这里有两个选择。

使用相对导入

这是最简单的选择。导入东西时只需指定相对路径。

import testRouter from './module/lib';

设置导入别名

您可以编辑您的tsconfig.json,以便它解析您键入的路径。

{
    "compilerOptions": {
        "baseUrl": "./src/",
        "paths": {
            "./*": ["./src/*"]
        }
    }
}

正如我们所见,TypeScript 现在将正确解析导入。

正确解析导入的 VS Code 的图像。

注意:以上只是告诉 TypeScript 编译器可以从 解析路径src,但不会影响代码 emit。例如,该import语句仍被编译为以下内容:

const lib_1 = require("module/lib");

这意味着除非您有另一个可以将其require转换为相对路径的构建工具,否则即使 TypeScript 说没问题,导入也不会在运行时工作。

由于模块分辨率不佳导致节点抛出的图像。


推荐阅读