我正在阅读tsconfig中的路径映射。json,我想用它来避免使用以下丑陋的路径:
项目组织有点奇怪,因为我们有一个包含项目和库的单一存储库。项目按公司和浏览器/服务器/通用进行分组。
如何配置tsconfig中的路径?Json,而不是:
import { Something } from "../../../../../lib/src/[browser/server/universal]/...";
我可以使用:
import { Something } from "lib/src/[browser/server/universal]/...";
webpack配置中还需要其他东西吗?或者是tsconfig。json足够了吗?
你可以结合使用baseUrl和路径文档。
假设根在最上面的src目录(我正确地阅读了你的图像)使用
// tsconfig.json
{
"compilerOptions": {
...
"baseUrl": ".",
"paths": {
"lib/*": [
"src/org/global/lib/*"
]
}
}
}
对于webpack,你可能还需要添加模块解析。对于webpack2,这可能是这样的
// webpack.config.js
module.exports = {
resolve: {
...
modules: [
...
'./src/org/global'
]
}
}
这可以在您的tsconfig上设置。json文件,因为它是一个TS特性。
你可以这样做:
"compilerOptions": {
"baseUrl": "src", // This must be specified if "paths" is.
...
"paths": {
"@app/*": ["app/*"],
"@config/*": ["app/_config/*"],
"@environment/*": ["environments/*"],
"@shared/*": ["app/_shared/*"],
"@helpers/*": ["helpers/*"]
},
...
请记住,你想要引用的路径,它以你的baseUrl作为你所指向的路由的基础,这是强制性的,如文档所述。
字符“@”不是强制性的。
设置好之后,你可以像这样轻松地使用它:
import { Yo } from '@config/index';
你可能会注意到的唯一一件事是,智能感知在当前的最新版本中不起作用,所以我建议在导入/导出文件时遵循索引约定。
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping
这对我来说很管用:
yarn add --dev tsconfig-paths
ts-node -r tsconfig-paths/register <your-index-file>.ts
这将加载tsconfig.json中的所有路径。tsconfig.json示例:
{
"compilerOptions": {
{…}
"baseUrl": "./src",
"paths": {
"assets/*": [ "assets/*" ],
"styles/*": [ "styles/*" ]
}
},
}
确保你有baseUrl和路径来工作
然后你可以像这样导入:
import {AlarmIcon} from 'assets/icons'
这是相对路径
而不是下面的代码
import { Something } from "../../../../../lib/src/[browser/server/universal]/...";
我们可以避免“../../../../.. .”/“它看起来很奇怪,也不容易读。
Typescript配置文件有相同的答案。
只要指定baseUrl,配置就会照顾你的相对路径。
配置方法:tsconfig。Json文件添加以下属性。
"baseUrl": "src",
"paths": {
"@app/*": [ "app/*" ],
"@env/*": [ "environments/*" ]
}
最终会像下面这样
import { Something } from "@app/src/[browser/server/universal]/...";
它看起来简单,令人敬畏,更可读。