typescript - შეცვალეთ ნაგულისხმევი ფაილის რეზოლუცია JavaScript-ში
JavaScript პროექტში, ფაილი სახელწოდებით index.js შეიძლება აიმპორტოს ასე:
import SomeComponent from 'components/some-component'
სამედიცინო index.js-ის მითითების ნაცვლად.
ჩემი პროექტში, მე ვაკონტროლებ სხვა სახელების კონვენციის გამოყენებას: some-component.component.js. ამ გზით მე შემიძლია შევამჩნიო, რა ტიპის ფაილია ერთხანს (მალევე, ვიდრე მილიარდი index.js-ის საშუალებით).
რაც მე ვცდილობ, არის იგივე იმპორტის სქემის გამოყენება ფაილებსა, რომლებსაც აქვთ ტემპლეტი *.component.js. სხვა სიტყვებით:
import SomeComponent from 'components/some-component'
სათანადო წილს მიიღოს
import SomeComponent from 'components/some-component/some-component.component.js'
მე მაქვს შემდეგი (განმარტებითი) jsconfig.json:
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"*": ["./*"]
}
}
}
ყოველი იდეა ამისა მიღწევის შესახებ?
გმადლობთ წინასწარ!
პასუხი #1
მსხვერპლადი პასუხი: არ შეგიძლიათ იმპორტის გადაწყვეტის მორგება ფუნქციის (ან RegExp) გამოყენებით. ვებ-პროექტისთვის, შეგიძლიათ გამოიყენოთ ისეთი ინსტრუმენტი, როგორიცაა Webpack, სარეგისტრაციო დამატებითი ლოდერით. მაგრამ ეს არის სპეციალურად Webpack-ის გადაწყვეტილება, რომელიც არ იმუშავებს სხვა ინსტრუმენტებთან (მაგალითად, Ctrl-click VSCode-ში ან TSC-ის პირდაპირ გამოყენების დროს).
დეტალური პასუხი:
JavaScript ფაილების გარჩევა დამოკიდებულია იმ ინსტრუმენტებზე, რომელიც იყენებთ. სტანდარტები ცოტა ხნით შეიცვალა წლების განმავლობაში, და მიუხედავად იმისა, რომ ყველაფერი იკრიბება ESM-ში, ჯერ კიდევ არსებობს ბევრი შეუთანხმებლობა.
TypeScript მოდულის გარჩევადობა აღწერილია აქ: https://www.typescriptlang.org/docs/handbook/module-resolution.html თქვენ შეგიძლიათ გქონდეთ baseUrl, შეაერთოთ მრავალი დირექტორია ერთში (rootDirs) ან გქონდეთ შეზღუდული სიმბოლოების mapping გზა. (https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping). თქვენ უკვე იყენებდით თქვენს შეკითხვას, ამიტომ, ალბათ, ახალს არაფერს გეტყვით. მაგრამ, აქ მთავრდება TS კონფიგურაციის პარამეტრები. (შეგიძლიათ დააკონფიგურიროთ კომპილაციის მოდულის გარჩევადობა TSC API-ის გამოყენებით, მაგრამ არა CLI/ინსტრუმენტების კონფიგურაციის ვარიანტებიდან)
NodeJS შეგიძლია აკავშიროს მოდულების დასარეზოლუციო მექანიზმი. მაგალითად, Yarn 2+ ამას აკეთებს PNP (https://yarnpkg.com/features/pnp) ფუნქციის მხარდასაჭერად. თუმცა, TypeScript მაინც საჭიროებს ტიპების დასარეზოლუცირებას და ის არ გამოიყენებს თქვენს კასტომიზებულ დასამატებელ მექანიზმს ამისთვის. სიტუაცია სხვა ინსტრუმენტებთან, როგორიცაა Webpack, მსგავსია.
Node-ისა და TypeScript-ის მოდულის რეზოლუცია განსაკუთრებულია სწორედ ამ ინსტრუმენტებისთვის. ESM სტანდარტი კიდევ უფრო მკაცრია: from ნაწილი უნდა იყოს აბსოლუტური ან რელატიური URL, ან „ანტისატიკური იდენტიფიკატორი“, რომლის რუკასაც import map-ის გამოყენებით გეგმავთ. სხვა სიტყვებით, თქვენ ვერ შექმნით საფარს რეზოლუციისთვის შესაბამის კურსორის ალგორითმს. ამის გამართლებას აღწერს Import Maps-ის სტანდარტის რეპოზიტორი: https://github.com/WICG/import-maps#a-programmable-resolution-hook
დასკვნა: თუ ნამდვილად-ნამდვილად გსურთ შექმნათ მორგებული მჭრის მოდულის გადაწყობა, შეიძლება შეძლოთ თქვენი საკუთარი CLI-ის შექმნა TSC API-ის გამოყენებით. შესაძლოა ეს არ იმუშაოს სხვა საშუალებებთან და ალბათ უფრო მარტივია სხვა სახელების კონვენციაზე მიჩვევა.