我正在try 使用TypeScript的路径功能,这样我就不需要再使用相对导入了.

这是我的tsconfig.json份文件:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "outDir": "./dist",
    "rootDir": ".",
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "resolveJsonModule": true,
    "baseUrl": ".",
    "allowJs": true,
    "paths": {
      "*": ["node_modules/*", "src/*"],
      "@config/*": ["src/config/*"],
      "@controllers/*": ["src/controllers/*"],
      "@middlewares/*": ["src/middlewares/*"],
      "@models/*": ["src/models/*"],
      "@routes/*": ["src/routes/*"],
      "@types/*": ["src/types/*"],
      "@utils/*": ["src/utils/*"]
    }
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "firebase-config.json", "webpack.config.js"]
}

这是我的package.json份文件:

{
  "name": "express-ts-boilerplate",
  "version": "0.1.0",
  "description": "Express Typescript Boilerplate",
  "main": "src/server.js",
  "author": "Sriram R",
  "scripts": {
    "start": "NODE_ENV=production node dist/src/app.js",
    "dev": "nodemon src/app.ts",
    "build": "tsc -p .",
    "test": "mocha --exit -r ts-node/register src/tests/*.spec.ts"
  },
  "dependencies": {
    // Dependencies here
  },
  "devDependencies": {
    // Dependencies here
  },
}

所以现在在我的一个文件中,我try 了@config/typeConfig次,但我只得到了cannot find module次错误.

也许是因为nodemon,但ts-node也不起作用.

推荐答案

注意:对于nodemon的工作示例,请跳到我答案的第二部分.

如果你的意思是,一旦你编译了文件并运行了应用程序,模块就找不到了,那么看看这个线程:Module path maps are not resolved in emitted code

"路径"设计用于允许重新映射的加载程序

假设我在tsconfig.json岁时有这样一条路:

"paths": {
      "@config/*": ["src/config/*"]
    }

我需要一个在文件中使用该路径的文件

import test from '@config/test';

查看编译后的文件,我最终发现

var test_1 = __importDefault(require("@config/test"));

如您所见,路径尚未解析,仍然是@config/test.用nodemonts-node测试应用程序时也会发生同样的情况.

此外,还需要使用Typescript路径别名解析程序,例如tspath.

TypeScript编译器将能够解析路径,这样就可以毫无问题地编译,但是JavaScript输出将无法通过 node 或Web浏览器执行,为什么?原因很简单!

JavaScript引擎对编译时TypeScript配置一无所知.

为了运行JavaScript代码,现在需要再次将路径别名设置为相对路径,这是TSPath发挥作用的时间.


也就是说,如果你想让nodemon工作,下面的配置就可以了.事先,确保安装了tsconfig-paths个.

npm i tsconfig-paths

使用此选项加载位置在tsconfig的路径部分中指定的模块.json.通过API和运行时加载都受支持.

很好,我们将执行node-r tsconfig-paths/register将路径转换为物理文件路径,-r ts-node/register将动态执行ts文件,nodemon将在更改后重新启动应用程序.

package.json中,您需要添加以下内容(根据需要进行修改):

    "nodemonConfig": {
          "ignore":
            [
              "**/*.test.ts",
              "**/*.spec.ts",
              ".git",
              "node_modules"
            ],
          "watch": [
            "src"
          ],
          "exec": "node -r tsconfig-paths/register -r ts-node/register ./src/server.ts",
          "ext": "ts, js"
        },
    "scripts": {
          "dev": "nodemon"
        }

请注意nodemon的新增配置.

最后

npm run dev

事情应该进展顺利.

Typescript相关问答推荐

如何声明循环数组类型?

在TypScript中的同一数组中验证不同类型

发出与HTML多姆事件重叠的Angular事件

如何在另一个if条件中添加if条件

如何判断输入是否是TypeScript中的品牌类型?

为什么从数组中删除一个值会删除打字错误?

基于平台的重定向,Angular 为16

如何在Typescript 中输入两个相互关联的变量?

如何按不能保证的功能过滤按键?

参数属性类型定义的REACT-RUTER-DOM中的加载器属性错误

为什么有条件渲染会导致material 自动完成中出现奇怪的动画?

MatTool提示在角垫工作台中不起作用

找不到财产的标准方式?

转换器不需要的类型交集

如何创建一个将嵌套类属性的点表示法生成为字符串文字的类型?

如何以类型安全的方式指定键的常量列表,并从该列表派生所挑选的接口?

可以';t使用t正确地索引对象;联合;索引类型

Svelte+EsBuild+Deno-未捕获类型错误:无法读取未定义的属性(读取';$$';)

TypeScript是否不知道其他函数内部的类型判断?

数据库中的表请求返回如下日期:2023-07-20T21:39:00.000Z 我需要将此数据格式化为 dd/MM/yyyy HH:mm