मैं 'my-app-name/services'
निम्नलिखित आयात जैसी लाइनों से बचने के लिए कुछ कैसे पेश कर सकता हूं ?
import {XyService} from '../../../services/validation/xy.service';
मैं 'my-app-name/services'
निम्नलिखित आयात जैसी लाइनों से बचने के लिए कुछ कैसे पेश कर सकता हूं ?
import {XyService} from '../../../services/validation/xy.service';
जवाबों:
टाइपस्क्रिप्ट 2.0 में आप एक baseUrl
संपत्ति जोड़ सकते हैं tsconfig.json
:
{
"compilerOptions": {
"baseUrl": "."
// etc...
},
// etc...
}
फिर आप सब कुछ आयात कर सकते हैं जैसे कि आप आधार निर्देशिका में थे:
import {XyService} from "services/validation/xy.service";
इसके शीर्ष पर, आप एक paths
संपत्ति जोड़ सकते हैं, जो आपको एक पैटर्न से मिलान करने की अनुमति देता है, फिर इसे मैप कर सकता है। उदाहरण के लिए:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"services/*": [
"services/validation/*"
]
}
// etc...
},
// etc...
}
जिससे आप इसे कहीं से भी आयात कर सकते हैं:
import {XyService} from "services/xy.service";
वहां से, आपको इन आयात नामों का समर्थन करने के लिए जो भी मॉड्यूल लोडर उपयोग कर रहे हैं उसे कॉन्फ़िगर करने की आवश्यकता होगी। अभी टाइपस्क्रिप्ट कंपाइलर स्वचालित रूप से इनको मैप करने के लिए प्रतीत नहीं होता है।
आप इसके बारे में जीथूब मुद्दे में अधिक पढ़ सकते हैं । एक rootDirs
संपत्ति भी है जो कई परियोजनाओं का उपयोग करते समय उपयोगी होती है।
मैंने पाया है कि इसे "बैरल" का उपयोग करके आसान बनाया जा सकता है ।
index.ts
फ़ाइल बनाएँ ।उदाहरण
अपने मामले में, पहले एक फ़ाइल बनाएं जिसे कहा जाता है my-app-name/services/validation/index.ts
। इस फ़ाइल में, कोड है:
export * from "./xy.service";
फिर नामक एक फाइल बनाएं my-app-name/services/index.ts
और यह कोड रखें:
export * from "./validation";
अब आप अपनी सेवा का उपयोग कर सकते हैं जैसे ( index
निहित है):
import {XyService} from "../../../services";
और एक बार जब आपके पास कई फाइलें होती हैं तो यह और भी आसान हो जाता है:
import {XyService, MyOtherService, MyOtherSerivce2} from "../../../services";
इन अतिरिक्त फ़ाइलों को बनाए रखने के लिए थोड़ा अधिक काम करना है ( बैरल-अनुरक्षक का उपयोग करके काम को समाप्त किया जा सकता है ), लेकिन मैंने पाया है कि यह कम काम के साथ अंत में भुगतान करता है। प्रमुख निर्देशिका संरचना परिवर्तन करना बहुत आसान है और यह आपके द्वारा किए जाने वाले आयातों की संख्या में कटौती करता है।
सावधान
ऐसा करते समय कुछ चीजें हैं जिन्हें आपको देखना है और ऐसा नहीं कर सकते हैं:
import {XyService} from "../validation";
)। मैंने यह पाया है और पहला बिंदु आयात की त्रुटियों को परिभाषित नहीं कर सकता है।baseUrl
'tsconfig.json' के स्थान के सापेक्ष है। तो हमारे मामले में (कोणीय अनुप्रयोग) मान होना चाहिए "baseUrl": "./app",
, जहां "एप्लिकेशन" एप्लिकेशन की जड़ है।
Tsconfig.json में नीचे विन्यास का उपयोग करना बेहतर है
{
"compilerOptions": {
"...": "reduced for brevity",
"baseUrl": "src",
"paths": {
"@app/*": ["app/*"]
}
}
}
कोणीय 6 से पहले पारंपरिक तरीका:
`import {XyService} from '../../../services/validation/xy.service';`
इन में सुधार किया जाना चाहिए:
import {XyService} from '@app/services/validation/xy.service
छोटा एवं सुन्दर!
मुझे तो बस यह सवाल आया। मुझे पता है कि यह अब वापस आ गया है, लेकिन इसके पार आने वाले किसी भी व्यक्ति के लिए एक सरल उत्तर है।
मैं केवल इसलिए भर आया क्योंकि मैं कुछ समय से काम कर रहा था और मैं सोच रहा था कि क्या कुछ कोणीय 7 में बदल गया है। नहीं, यह सिर्फ मेरा अपना कोड था।
भले ही मुझे tsconfig.json
लंबे आयात रास्तों से बचने के लिए केवल एक लाइन बदलनी पड़े।
{
"compilerOptions": {
"...": "simplified for brevity",
"baseUrl": "src"
}
}
उदाहरण:
// before:
import {XyService} from '../../../services/validation/xy.service';
// after:
import { XyService } from 'app/services/validation/xy.service';
यह मेरे लिए बहुत काम किया है जब से कोणीय-सीएलआई साथ आया है।