reactjs - Yeni bir TypeScript React uygulaması oluştururken takma adlı importlar artık desteklenmiyor
Aşağıdaki komutla [email ve [email kullanarak yeni bir React-typescript uygulaması oluşturdum:
npx create-react-app my-app --template typescriptSonra, daha önce defalarca yaptığım gibi takma ad yolunu tanımlamaya karar verdim. Uygulamamın kök dizininde tsconfig.paths.json dosyasını oluşturdum.
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"components/*": ["/components/*"],
"routes/*": ["/routes/*"],
"constants/*": ["/constants/*"]
}
}
}
Sonra tsconfig.json dosyasına extend özelliğini ekledim:
{
"extends": "./tsconfig.paths.json",
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}
Ayrıca, [email kurdum ve config-override.js dosyasını oluşturdum:
const path = require('path');
module.exports = function override(config) {
config.resolve = {
...config.resolve,
alias: {
...config.alias,
'components': path.resolve(__dirname, 'src/components/*'),
'routes': path.resolve(__dirname, 'src/routes/*'),
'constants': path.resolve(__dirname, 'src/constants/*'),
}
}
return config;
}
Bu yüzden IDE'mi (VSCode) tekrar açtım ve npm start komutunu çalıştırdım. Başlatma komutunu çalıştırmadan önce package.json dosyasındaki scriptleri değiştirdiğimi belirtmeliyim.
{
.
.
.
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject"
}
.
.
.
}
Başlatma komutunu çalıştırdıktan sonra, terminalde bu mesaj görüntülendi ve derleme başarısız oldu:
tsconfig.json dosyanıza aşağıdaki değişiklikler yapılmaktadır: -compilerOptions.paths ayarlanamaz (takma isimli içe aktarmalar desteklenmez)
*Derlenemedi.
./src/App.tsx Modül bulunamadı: 'components' çözümlenemiyor .......*
Bu sorunu çözmek için araştırmaya başladım. Aşağıda bazılarını belirteceğim birçok yaklaşım buldum:
1. jsconfig.json dosyanıza gidin ve temel URL'yi "." olarak ekleyin
"compilerOptions": {
"baseUrl": ".",
...
Sonra src dizininden doğrudan öğeleri içe aktarabilirsiniz
import Myfile from "src/myfile.js"
Sonuç ==> ÇALIŞMADI!
2. Bu problem, yeniden yönlendirme için bir takma ad ile çözülür. Önce react-app-rewire-alias paketini yükleyin, ardından config-override.js dosyasını oluşturun:
const {alias, configPaths} = require('react-app-rewire-alias')
module.exports = function override(config) {
alias(configPaths())(config)
return config
}
Sonuç ==> ÇALIŞMADI!
3. [email paketini kullanma
Craco ve craco-alias kurun
npm install @craco/craco --savevenpm i -D craco-aliasKök dizinde
tsconfig.paths.jsonoluşturun{ "compilerOptions": { "baseUrl": "./src", "paths": { "@components/*" : ["./components/*"] } } }tsconfig.jsoniçindetsconfig.paths.jsondosyasını genişlet{ "extends": "./tsconfig.paths.json", //varsayılan yapılandırmalar... }
Kök dizinde
craco.config.jsoluşturunconst CracoAlias = require("craco-alias"); module.exports = { plugins: [ { plugin: CracoAlias, options: { source: "tsconfig", // baseUrl SHOULD be specified // plugin does not take it from tsconfig baseUrl: "./src", /* tsConfigPath should point to the file where "baseUrl" and "paths" are specified*/ tsConfigPath: "./tsconfig.paths.json" } } ] };package.jsoniçinde"start": "react-scripts start"'i"start": "craco start"ile değiştirin
Sonuç ==> ÇALIŞMADI!
Kafam karıştı çünkü daha önce alias yolunu birçok kez kullandım, ama şimdi çalışmıyor. Uygulamamı eject etmek istemiyorum ama alias yolunu kullanmak faydalı.
Cevap #1
İşte bir çözüm yolu
Yol takma adları artık desteklenmiyor.
Ama ../../../ gibi can sıkıcı import yollarından kaçınmak için dosyaları doğrudan src dizinine göre import edebilirsiniz
Şunları yapabilirsiniz
tsconfig.json dosyanıza gidin ve base URL'i "." olarak ekleyin
"compilerOptions": {
"baseUrl":".",
...
Sonra src dizinine göre dosyaları doğrudan içe aktarabilirsiniz
import utility from "src/Myfile.js"
Cevap #2
Birkaç gün önce oluşturulmuş Typescript CRA'da hepsini bir arada (typescript + eslint) çalıştırmayı başardım. Bunu şöyle yaptım:
package.json dosyasından seçilen bağımlılıklar:
react: 17.0.2
eslint: 8.6.0
react-scripts: 5.0.0
eslint-import-resolver-babel-module 5.3.1
Modül çözücüyü yükle
yarn add eslint-import-resolver-babel-module --dev
Konfigürasyon
tsconfig
Hiç
tsconfig.paths.jsondosyam yok
// tsconfig.json
{
"compilerOptions": {
//...youCompilerOptions
"baseUrl": "src"
},
"include": ["src"]
}
webpack
Yeni bir dosya oluşturun veya mevcut webpack.config.js'ye ekleyin
// webpack.config.js
module.exports = {
resolve: {
extensions: ["ts", "tsx", "js", "jsx"],
alias: {
components: path.resolve(__dirname, "src/components"),
},
},
};
eslint
Son olarak .eslintrc.json
// .eslintrc.json
{
// ...yourConfig
"settings": {
"import/resolver": {
"node": {
"paths": ["src"],
"moduleDirectory": ["node_modules", "src"],
"alias": {
"components": "./src/components"
}
}
}
},
}
