reactjs - react、react-app-rewire 和 typescript 的绝对路径
问题描述
我正在使用create-react-app
+ typescript,我想添加绝对路径。
我试图达到可以使用绝对路径的目的,如下所示:
代替import x from '../../../components/shell/shell'
使用import x from '@components/shell/shell'
;
这是tsconfig.json文件:
{
"extends": "./paths.json",
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"baseUrl": "src",
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react"
},
"include": [
"src"
]
}
我正在使用扩展文件作为路径,因为由于某种原因npm start
会覆盖文件。path.json文件也是如此:
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@": ["./src"],
"@components/*": ["components/*]"
}
}
}
我还有一个.env文件:
NODE_PATH=src
我安装了react-app-rewire
,所以我可以配置路径,我的config-ovverrides.js文件如下所示:
module.exports = {
paths: function(paths, env) {
// ...add your paths config
return paths;
}
};
我坚持连接所有点,它不起作用,我仍然看不到我需要做什么才能配置 webpack 路径对象;
如何在 cra、ts 和 rewire 中实现路径?
解决方案
您可以使用5 个简单的步骤来解决它,而无需弹出:
第 1 步:将 react-app-rewired 添加到您的devDependencies
.
yarn add -D react-app-rewired
或者npm intall react-app-rewired --save-dev
第 2 步:安装后,您将能够将package.json
默认 ReactsJS 脚本更改为:
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject"
}
第 3 步:创建一个名为tsconfig.paths.json
根路径的新文件,其内容如下:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"services/*": ["./src/shared/services/*"],
"interfaces/*": ["./src/shared/interfaces/*"]
}
}
}
提示1:您可以选择要使用的路径,例如:
@services, @interface, @src, ~, @, etc
只需更改里面的键"paths": {}
同样适用于它的 value: ,在这里使用相对路径。["src/shared/services/"], ["src/shared/interfaces/"], ["src/*"]
第 4 步:进入tsconfig.json
,在"compilerOptions"
您需要扩展tsconfig.paths.json
您刚刚创建的之前。
像这样:
{
"extends": "./tsconfig.paths.json",
...//rest of file infos compilerOptions, include... whatever
}
第 5 步:创建一个新文件config-overrides.js
,在其上添加别名和相对路径:
const path = require('path');
module.exports = function override(config) {
config.resolve = {
...config.resolve,
alias: {
...config.alias,
'services': path.resolve(__dirname, 'src/shared/services'),
'interfaces': path.resolve(__dirname, 'src/shared/interfaces')
},
};
return config;
};
提示 2:如果您正在使用eslint
,请记住有一个.eslintignore
文件并config-overrides.js
在其中添加。
重新启动你的 IDE 或文本编辑器,在我的例子中是 VSCode。
完成了!现在只需运行yarn start
或npm run start
推荐阅读
- display - 如何识别 I2C 显示控制器
- java - 如何在 Eclipse 星云中绘制时间?
- javascript - Fetch 通话挂起,没有任何响应
- sql - 如何使用 Coalesce 编写具有多个条件的 T-sql Case 语句
- python - Python multiprocessing.Process OSError:[Errno 24]打开的文件太多
- java - 如何通过让应用程序继续执行任务而无需使用 Spring 进行过多的空值检查来解决应用程序中的空指针异常
- google-analytics - 我们可以从 Google Analytics 报告 API 访问基准测试报告/数据吗?
- java - Java 递归评估
- python - plt.savefig 在 jupyter 笔记本中不起作用
- javascript - 如何让按钮在被点击后停止监听