标签: tsconfig-paths

tsconfig 中的绝对路径不起作用

我看到了一些关于这个问题的问题,但没有一个不起作用我有一个nodejs项目和Typescript。我不喜欢使用相对路径。当我在 tsconfig 中设置路径时,出现以下错误:

找不到模块“@app/controllers/main”

// main.ts
export const fullName = "xxxx";
...

// app.ts
import { fullName } from '@app/controllers/main'
...
Run Code Online (Sandbox Code Playgroud)

这是我的项目的结构:

-node_modules
-src
----controllers
---------------main.ts
----app.ts
-package.json
-tsconfig.json
Run Code Online (Sandbox Code Playgroud)

ts配置:

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "strict": true,
        "baseUrl": ".",
        "paths": {
            "@app/*": ["src/*"]
        },
        "esModuleInterop": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题出在哪里?

提前致谢。

node.js typescript tsconfig tsconfig-paths

12
推荐指数
4
解决办法
2万
查看次数

找不到模块“tsconfig-paths/register”

我正在尝试在 CLI 中使用 ts-node 运行 typescript 脚本,这意味着我没有 package.json。

这是我尝试运行的命令:

npx -p typescript@latest -p ts-node@latest -p @types/node@latest ts-node -T --project scripts/tsconfig.script.json scripts/my-script.ts
Run Code Online (Sandbox Code Playgroud)

当我在脚本中使用相对路径时,它工作得非常好。

然后我尝试通过启用路径来增强它,tsconfig.script.json以便能够从它们导入。

我想使用tsconfig-paths。这是我尝试运行的命令:

npx -p typescript@latest -p ts-node@latest -p @types/node@latest -p tsconfig-paths@latest ts-node -T -r tsconfig-paths/register --project scripts/tsconfig.script.json scripts/my-script.ts
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Error: Cannot find module 'tsconfig-paths/register'
Run Code Online (Sandbox Code Playgroud)

我尝试过调整参数的顺序ts-node以及添加/删除选项,但是,我仍然无法使其工作并查看包tsconfig-paths

我错过了什么吗?

提前致谢

typescript ts-node npx tsconfig-paths

11
推荐指数
1
解决办法
2万
查看次数

如何在库项目中具有绝对导入路径?

我有一个带工作区的库,其中包含两个项目,一个用于库本身,一个用于测试应用程序。

??? projects
    ??? midi-app
    ??? midi-lib
Run Code Online (Sandbox Code Playgroud)

在工作空间tsconfig.json文件中,我配置了一些@app@lib路径:

"paths": {
  "@app/*": ["projects/midi-app/src/app/*"],
  "@lib/*": ["projects/midi-lib/src/lib/*"],
  "midi-lib": [
    "dist/midi-lib"
  ],
  "midi-lib/*": [
    "dist/midi-lib/*"
  ]
}
Run Code Online (Sandbox Code Playgroud)

在上述projects/midi-lib/tsconfig.lib.json文件上扩展了一个tsconfig.json文件:

"extends": "../../tsconfig.json",
Run Code Online (Sandbox Code Playgroud)

有一个public-api.ts文件包含:

export * from './lib/midi-lib.module';
Run Code Online (Sandbox Code Playgroud)

我可以将此库与测试应用程序一起使用。

但是,当我尝试在另一个客户端应用程序,另一个工作空间(作为节点模块导入)中使用它时,在未知路径上会出现很多错误 Can't resolve '@lib/...'

如何表达库路径,以便它们在客户端应用程序中公开?或者在打包库时如何转换库路径?

作为附带的问题,我想知道为什么扩展未按相反方式进行。为什么tsconfig.json文件没有在文件上扩展projects/midi-lib/tsconfig.lib.json

这是我打包然后使用库的方法:

要打包该库,请在父package.json文件的scripts数组中添加以下脚本

"copy-license": "cp ./LICENSE.md ./dist/midi-lib",
"copy-readme": "cp ./README.md ./dist/midi-lib",
"copy-files": "npm run copy-license && npm run copy-readme",
"build-lib": "ng build midi-lib",
"npm-pack": "cd …
Run Code Online (Sandbox Code Playgroud)

typescript tsconfig angular angular-library tsconfig-paths

10
推荐指数
1
解决办法
818
查看次数

tsc - 不编译别名路径

我有打字稿并使用别名。这是 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)

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

typescript tsc tsconfig tsconfig-paths

10
推荐指数
3
解决办法
6996
查看次数

VSCode / tslint 不解析 tsconfig.json 中的路径

vscode 以某种方式不尊重我的 tsconfig.json(几个星期以来,它已经不同了。无论是我的错误还是 vscode 更新......)

{
"compileOnSave": false,
"compilerOptions": {
    "baseUrl": "./",
    "paths": {
        "@foo-animation/*": [
            "src/app/animation/*"
        ],
        ...
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

分别在问题选项卡中:

找不到模块“@foo-animation/animation-micro”或其相应的类型声明。ts(2307)

? 常规基本路径(如@angular/core已正确解决,只有我的“自定义”路径才是问题...

? 编译、构建、运行......一切都像魅力一样。所以我相信从角度/打字稿的角度来看一切都很好。(另外,我使用 IntelliJ 的开发人员没有问题......)所以它似乎归结为“告诉 vscode 关于它”......:-/

Mytsconfig.json位于项目的根文件夹中。唯一的问题是,我使用了另一个tsconfig.app.json,其中包括上面的tsconfig.json

在此处输入图片说明

那么有没有办法告诉 vscode 在哪里寻找它的 tsconfig.json (鼓励解析这些路径)?

This SO questionthis VSCode github issue可能相关,但我仍然不知道该怎么做。

typescript tsconfig visual-studio-code angular tsconfig-paths

8
推荐指数
1
解决办法
859
查看次数

TS 配置路径错误。错误:找不到模块“@/models/UserSchema”

我正在制作一个不和谐的机器人,我正在尝试打字稿上的路径别名功能。但我在使用它时不知何故不断收到此错误。我正在使用 NodeJs 并使用

这是错误消息

Error: Cannot find module '@/models/UserSchema'
Require stack:
- /mnt/c/Users/ASUS/Documents/_Frastio-Docs/dev/DinderBot/src/index.ts
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._resolveFilename (/mnt/c/Users/ASUS/Documents/_Frastio-Docs/dev/DinderBot/node_modules/module-alias/index.js:49:29)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/mnt/c/Users/ASUS/Documents/_Frastio-Docs/dev/DinderBot/src/index.ts:13:1)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Module.m._compile (/mnt/c/Users/ASUS/Documents/_Frastio-Docs/dev/DinderBot/node_modules/ts-node/src/index.ts:1056:23)
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用路径时的代码。它似乎是正确的,在 vscode 上没有错误,但是当我运行该应用程序时,它给出了找不到模块错误

import Test from '@/models/TestSchema'
import User from '@/models/UserSchema'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我的 tsconfig.json

{
  "compilerOptions": {
    "strictNullChecks": true,
    "baseUrl": ".",
    "emitDecoratorMetadata": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "lib": ["es5", "es6"],
    "module": "CommonJS",
    "moduleResolution": "node",
    "outDir": "./dist",
    "paths": {
      "@/*": ["src/*"]
    },
    "resolveJsonModule": true,
    "sourceMap": …
Run Code Online (Sandbox Code Playgroud)

node.js typescript tsconfig tsconfig-paths

8
推荐指数
1
解决办法
1万
查看次数

如何解决相对路径地狱(带有打字稿的节点)

我正在使用节点、打字稿和其他包开发 CLI。这个想法很简单,CLI 为您提供了节点项目的初始结构(javascript 或 typescript)

\n

嗯,在测试的时候,我发现了一个问题,我好几天都无法解决。初始结构为:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80api\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.controller.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.interface.ts (just for typescript projects)\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.routes.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.service.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80config\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80environments\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80development.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80index.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80production.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80global\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80services\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80abstract.service.ts (just for typescript projects)\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80middlewares\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80database.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80index.ts/js\n\xe2\x94\x82    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80server.ts/js\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.editorconfig\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.env\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80package-lock.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80tsconfig.json (just for typescript projects)\n
Run Code Online (Sandbox Code Playgroud)\n

Typescript 服务文件扩展了抽象服务(这个位于 参考资料中./src/global/services/abstract.service.ts)。每个组件都位于./src/api目录中并具有其各自的文件夹(如用户组件)。在users组件中导入抽象类的相对路径是../../global/services/abstract.service

\n

但是您可以在不同的目录中创建组件,因此之前的相对路径不起作用。为了解决这个问题,我决定使用像 webpack 这样的路由配置。所以我不想使用以前的相对路径,而是想使用这样的东西@global/services/abstract.service

\n

如果节点项目使用 javascript 和 babel,我就实现了这一点:

\n
    \n
  • @babel/polyfill
  • \n
  • @babel/cli
  • \n
  • @babel/核心
  • \n
  • @babel/节点
  • \n
  • @babel/预设节点 …

relative-path node.js typescript tsconfig tsconfig-paths

7
推荐指数
0
解决办法
2750
查看次数

将 tsconfig-paths 与 es 模块一起使用

我有一个使用 commonjs 模块的打字稿项目,我用ts-node它来运行它并在运行时tsconfig-paths解析tsconfig.compilerOptions.paths

现在我希望我的项目迁移到使用es模块,所以我做了一些更改:

  • 添加type: module到 package.json
  • 更改module: commonjsES2022tsconfig.json
  • 将命令更改ts-nodenode --loader ts-node/esm

现在一切都工作正常,但似乎tsconfig-paths在 esm 中不起作用。

最小复制品:

在这两个项目中:

  • 运行npm run build以测试使用带有 esm 的 typescript 进行编译
  • 运行npm start测试ts-node
  • 运行npm start:paths测试ts-nodetsconfig-paths

node.js typescript tsconfig ts-node tsconfig-paths

6
推荐指数
0
解决办法
1526
查看次数

Typescript 编译成功但节点找不到模块

Error: Cannot find module \'hello\'即使 Typescript 编译成功,也会出现节点错误。

\n

Dir 结构(请注意,这与baseUrl 的 tsconfig 文档几乎相同)

\n
main\n| src\n| \xe2\x94\x9c\xe2\x94\x80 index.ts\n| \xe2\x94\x94\xe2\x94\x80 hello\n|      \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.ts\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tsconfig.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json\n
Run Code Online (Sandbox Code Playgroud)\n

我只想使用非相对导入(所以没有/, ./, ../)。我过去遇到过这个问题,并且总是诉诸于使用相对导入,但我不想继续这样做。

\n

在顶层index.tsimport { helloWorld } from \'hello\'

\n

tsc编译成功,输出目录dist如下所示:

\n
main\n\xe2\x94\x9c\xe2\x94\x80 src\n\xe2\x94\x9c\xe2\x94\x80 tsconfig.json\n\xe2\x94\x9c\xe2\x94\x80 package.json\n\xe2\x94\x94\xe2\x94\x80 dist\n    \xe2\x94\x9c\xe2\x94\x80 index.js\n    \xe2\x94\x94\xe2\x94\x80 hello\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.js\n
Run Code Online (Sandbox Code Playgroud)\n

运行node dist/index.js输出错误Error: Cannot find module \'hello\'。import 语句被编译到dist/index.js抛出require("hello")错误的位置。

\n

从 …

node.js typescript tsc tsconfig-paths typescript-module-resolution

6
推荐指数
1
解决办法
6047
查看次数

如何将 TypeScript 中的别名路径转换为 ​​JavaScript?

我有一个 TypeScript 项目,我正在尝试将其转换为使用路径别名的可执行 JavaScript。这是我正在开发的 NPM 包所必需的。

例如,这里从我的lib目录导入一个方法,而不通过相对路径引用它:

import { hexify } from '@lib/utils/conversion';
Run Code Online (Sandbox Code Playgroud)

通常,当我tsconfig-paths从入口点运行应用程序时,我会使用类似的命令ts-node-dev --files -r tsconfig-paths/register ./src/index.ts或在生产模式下使用node -r ts-node/register/transpile-only -r tsconfig-paths/register ./dist/index.js. 但在这种情况下,我想成功地将其转换为 JavaScript,以便编译器自动将路径别名转换为正确的相对路径,因此不需要使用ts-nodetsconfig-paths成功运行 JavaScript 代码。

我的tsconfig.json文件看起来像这样一些额外的上下文:

{
  "ts-node": {
    "files": true
  },
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "strict": true,
    "rootDir": "src",
    "outDir": "dist",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": false,
    "resolveJsonModule": true,
    "baseUrl": …
Run Code Online (Sandbox Code Playgroud)

javascript npm typescript tsc tsconfig-paths

6
推荐指数
1
解决办法
1042
查看次数