14

我有打字稿并使用别名。这是 tsconfig.json 的一部分

"compilerOptions": {
  "baseUrl": "./src",
   ...
},

通过设置基本网址,我可以改变

import User from "src/models/User.model.ts"

import User from "models/User.model.ts"

问题是 tsc 将 src 文件夹编译为 dist 文件夹,因此用户导入路径应更改为相对路径,如下所示:

"../models/User.model.js"

但它没有改变,所以我收到以下错误:

"models/User.model.js" not found

我寻找答案,但没有运气。

4

3 回答 3

11

打字稿问题对此进行了长时间的讨论,我似乎找不到比这更好的解决方案。

发展

npm i -save-dev tsconfig-paths/register

tsconfig.json

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

包.json

"scripts": {
  dev: "ts-node -r tsconfig-paths/register src/index.ts"
}

建造

npm i -save-d ttypescript @zerollup/ts-transform-paths

tsconfig.json

{
 "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@src/*": ["src/*"],
    },
    "plugins": [
      {
          "transform": "@zerollup/ts-transform-paths",
      }
    ]
  }
}

包.json

"scripts": {
  build: "ttsc -P ./tsconfig.json"
}
于 2021-03-12T00:50:18.973 回答
4

打字稿

打字稿转换路径

babel-plugin-module-resolver

package.json部分

"build": "ttsc && babel dist -d dist",

ttsc不是错误,它是打字稿配置的插件,用于更复杂的转译

tsconfig.json部分

"outDir": "dist",
"baseUrl": "./",
"paths": {
    "@/*": [
        "./src/*"
    ],
    "$/*": [
        "./tests/unit/*"
    ]
},
"plugins": [
    {
        "transform": "typescript-transform-paths",
        "afterDeclarations": true
    }
],

.babelrc全部内容

{
  "compact": false,
  "retainLines": true,
  "minified": false,
  "inputSourceMap": false,
  "sourceMaps": false,
  "plugins": [
    [
      "module-resolver",
      {
        "root": ["./dist"],
        "alias": {
          "@": "./dist"
        }
      }
    ]
  ]
}

于 2019-12-18T07:01:16.387 回答
2

单独的 TSC 编译器无法解析别名路径。因此,为了使其正常工作,您将需要安装额外的开发包

npm install --save-dev tsc-alias

tsc-alias用于在 tsc 编译器的 typescript 编译后用相对路径替换别名路径,因为单独的编译器无法解析别名路径

之后,您需要将package.json文件的构建命令修改为

"build": "tsc && tsc-alias",

之后运行npm run build应该可以工作,并且代码应该正确编译为javascript

如果您还想启用热重载,您将需要再安装一个开发包

npm install --save-dev concurrently

concurrently用于同时运行多个命令

之后,您需要在package.json文件中添加 1 个新脚本

"build:watch": "concurrently --kill-others \"tsc -w\" \"tsc-alias -w\"",

之后运行npm run build:watch应该可以工作,并且代码应该正确编译为具有热重载功能的 javascript

请注意: 我正在使用此版本的软件包

"tsc-alias": "^1.5.0",
"typescript": "^4.5.5",
"concurrently": "^7.0.0",

较旧或较新的版本可能会在编译代码时引入一些问题

于 2022-01-29T12:08:09.550 回答