我正在阅读tsconfig中的路径映射。json,我想用它来避免使用以下丑陋的路径:
项目组织有点奇怪,因为我们有一个包含项目和库的单一存储库。项目按公司和浏览器/服务器/通用进行分组。
如何配置tsconfig中的路径?Json,而不是:
import { Something } from "../../../../../lib/src/[browser/server/universal]/...";
我可以使用:
import { Something } from "lib/src/[browser/server/universal]/...";
webpack配置中还需要其他东西吗?或者是tsconfig。json足够了吗?
这对我来说很管用:
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'
如果你正在使用tsconfig-paths,这对你不起作用,试试tsconfig.json:
{
// ...
"compilerOptions": {
"outDir": "dist",
"rootDir": "src",
"baseUrl": ".",
"paths": {
"@some-folder/*": ["./src/app/some-folder/*", "./dist/app/some-folder/*"],
// ...
}
},
// ...
}
如果编译器看到@some-folder/some-class,它会试图在./src…或在。/dist....
2021年解决方案。
注意:CRA。最初,使用第三方库或为alias弹出应用程序的想法对我来说似乎很疯狂。然而,经过8个小时的搜索(并尝试了带有eject的变体),结果发现这个选项是最不痛苦的。
步骤1。
yarn add --dev react-app-rewired react-app-rewire-alias
步骤2。
在你的项目根目录下创建config-override .js文件,并填充如下内容:
const {alias} = require('react-app-rewire-alias')
module.exports = function override(config) {
return alias({
assets: './src/assets',
'@components': './src/components',
})(config)
}
步骤3。修复你的包裹。json文件:
"scripts": {
- "start": "react-scripts start",
+ "start": "react-app-rewired start",
- "build": "react-scripts build",
+ "build": "react-app-rewired build",
- "test": "react-scripts test",
+ "test": "react-app-rewired test",
"eject": "react-scripts eject"
}
如果@declarations不起作用,将它们添加到d.ts文件中。
例如:
“@constants”:”。/src/constants', =>在react-app-env.d中添加Ts声明模块@constants;
仅此而已。现在你可以像往常一样继续使用yarn或npm start/build/test命令。
完整版本的文档。
注意:文档中的“使用ts / js配置”部分对我不起作用。在构建项目时仍然存在“不支持别名导入”的错误。所以我用了一个更简单的方法。幸运的是,它起作用了。
如果你正在寻找用@引用根文件夹的最简单的例子,这将是它:
{
"compilerOptions": {
"baseUrl": "src",
"paths": {
"@/*": ["*"]
}
}
}
// Example usage: import * as logUtils from '@/utils/logUtils';
或者如果你甚至没有src文件夹,或者想要显式地将它包含在导入中,这也可以工作:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["*"]
}
}
}
// Example usage: import * as logUtils from '@/src/utils/logUtils';
你可以结合使用baseUrl和路径文档。
假设根在最上面的src目录(我正确地阅读了你的图像)使用
// tsconfig.json
{
"compilerOptions": {
...
"baseUrl": ".",
"paths": {
"lib/*": [
"src/org/global/lib/*"
]
}
}
}
对于webpack,你可能还需要添加模块解析。对于webpack2,这可能是这样的
// webpack.config.js
module.exports = {
resolve: {
...
modules: [
...
'./src/org/global'
]
}
}