我看到了一些关于这个问题的问题,但没有一个不起作用我有一个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)
我的问题出在哪里?
提前致谢。
我正在尝试在 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。
我错过了什么吗?
提前致谢
我有一个带工作区的库,其中包含两个项目,一个用于库本身,一个用于测试应用程序。
??? 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) 我有打字稿并使用别名。这是 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)
我搜索了答案,但没有运气。
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 question和this VSCode github issue可能相关,但我仍然不知道该怎么做。
typescript tsconfig visual-studio-code angular tsconfig-paths
我正在制作一个不和谐的机器人,我正在尝试打字稿上的路径别名功能。但我在使用它时不知何故不断收到此错误。我正在使用 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) 我正在使用节点、打字稿和其他包开发 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)\nRun Code Online (Sandbox Code Playgroud)\nTypescript 服务文件扩展了抽象服务(这个位于 参考资料中./src/global/services/abstract.service.ts)。每个组件都位于./src/api目录中并具有其各自的文件夹(如用户组件)。在users组件中导入抽象类的相对路径是../../global/services/abstract.service
但是您可以在不同的目录中创建组件,因此之前的相对路径不起作用。为了解决这个问题,我决定使用像 webpack 这样的路由配置。所以我不想使用以前的相对路径,而是想使用这样的东西@global/services/abstract.service
如果节点项目使用 javascript 和 babel,我就实现了这一点:
\n我有一个使用 commonjs 模块的打字稿项目,我用ts-node它来运行它并在运行时tsconfig-paths解析tsconfig.compilerOptions.paths。
现在我希望我的项目迁移到使用es模块,所以我做了一些更改:
type: module到 package.jsonmodule: commonjs为ES2022tsconfig.jsonts-node为node --loader ts-node/esm现在一切都工作正常,但似乎tsconfig-paths在 esm 中不起作用。
最小复制品:
es 模块项目,从 commonjs 项目派生出来,但经过修改以使用 es 模块
在这两个项目中:
npm run build以测试使用带有 esm 的 typescript 进行编译npm start测试ts-nodenpm start:paths测试ts-nodetsconfig-pathsError: Cannot find module \'hello\'即使 Typescript 编译成功,也会出现节点错误。
Dir 结构(请注意,这与baseUrl 的 tsconfig 文档几乎相同)
\nmain\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\nRun Code Online (Sandbox Code Playgroud)\n我只想使用非相对导入(所以没有/, ./, ../)。我过去遇到过这个问题,并且总是诉诸于使用相对导入,但我不想继续这样做。
在顶层index.ts有import { helloWorld } from \'hello\'。
tsc编译成功,输出目录dist如下所示:
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\nRun Code Online (Sandbox Code Playgroud)\n运行node dist/index.js输出错误Error: Cannot find module \'hello\'。import 语句被编译到dist/index.js抛出require("hello")错误的位置。
从 …
node.js typescript tsc tsconfig-paths typescript-module-resolution
我有一个 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-node并tsconfig-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) tsconfig-paths ×10
typescript ×10
tsconfig ×7
node.js ×5
tsc ×3
angular ×2
ts-node ×2
javascript ×1
npm ×1
npx ×1