tsc - 不编译别名路径

aha*_*tiz 10 typescript tsc tsconfig tsconfig-paths

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

"compilerOptions": {
  "baseUrl": "./src",
   ...
},
Run Code Online (Sandbox Code Playgroud)

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

import User from "src/models/User.model.ts"
Run Code Online (Sandbox Code Playgroud)

import User from "models/User.model.ts"
Run Code Online (Sandbox Code Playgroud)

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

"../models/User.model.js"
Run Code Online (Sandbox Code Playgroud)

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

"models/User.model.js" not found
Run Code Online (Sandbox Code Playgroud)

我搜索了答案,但没有运气。

Tat*_*rba 63

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

npm install --save-dev tsc-alias
Run Code Online (Sandbox Code Playgroud)

tsc-alias用于在 tsc 编译器进行打字稿编译后用相对路径替换别名路径,因为编译器本身无法解析别名路径

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

"build": "tsc && tsc-alias",
Run Code Online (Sandbox Code Playgroud)

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

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

npm install --save-dev concurrently
Run Code Online (Sandbox Code Playgroud)

同时用于同时运行多个命令

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

"build:watch": "concurrently --kill-others \"tsc -w\" \"tsc-alias -w\"",
Run Code Online (Sandbox Code Playgroud)

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

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

"tsc-alias": "^1.5.0",
"typescript": "^4.5.5",
"concurrently": "^7.0.0",
Run Code Online (Sandbox Code Playgroud)

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


小智 6

关于这个的打字稿问题有很长的讨论,我似乎找不到比这更好的解决方案。

发展

npm i -save-dev tsconfig-paths/register
Run Code Online (Sandbox Code Playgroud)

配置文件

{
 "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@src/*": ["src/*"],
    },   
  }
}
Run Code Online (Sandbox Code Playgroud)

包.json

"scripts": {
  dev: "ts-node -r tsconfig-paths/register src/index.ts"
}
Run Code Online (Sandbox Code Playgroud)

建造

npm i -save-d ttypescript @zerollup/ts-transform-paths
Run Code Online (Sandbox Code Playgroud)

配置文件

{
 "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@src/*": ["src/*"],
    },   
  }
 "plugins": [
      {
          "transform": "@zerollup/ts-transform-paths",
      }
  ],
}
Run Code Online (Sandbox Code Playgroud)

包.json

"scripts": {
  build: "ttsc -P ./tsconfig.json"
}
Run Code Online (Sandbox Code Playgroud)


小智 5

打字稿

打字稿转换路径

babel-插件模块-解析器

package.json部分

"build": "ttsc && babel dist -d dist",
Run Code Online (Sandbox Code Playgroud)

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

tsconfig.json部分

"outDir": "dist",
"baseUrl": "./",
"paths": {
    "@/*": [
        "./src/*"
    ],
    "$/*": [
        "./tests/unit/*"
    ]
},
"plugins": [
    {
        "transform": "typescript-transform-paths",
        "afterDeclarations": true
    }
],
Run Code Online (Sandbox Code Playgroud)

.babelrc全部内容

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

Run Code Online (Sandbox Code Playgroud)

  • 解释一下这些存储库的用途是什么? (5认同)
  • @SeizeTheDay 在您发表评论一周后引入了对 TS 4+ 的支持 (3认同)