কৌণিক 2 এ খুব দীর্ঘ আপেক্ষিক পাথ সহ আমদানি এড়াতে কীভাবে?


উত্তর:


139

টাইপস্ক্রিপ্ট ২.০+

টাইপস্ক্রিপ্ট ২.০ এ আপনি এখানে একটি 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একাধিক প্রকল্প ব্যবহার করার সময় দরকারী এমন একটি সম্পত্তিও রয়েছে।

প্রাক টাইপস্ক্রিপ্ট ২.০ (টিএস ২.০+ তে এখনও প্রযোজ্য)

আমি খুঁজে পেয়েছি এটি "ব্যারেল" ব্যবহার করে আরও সহজ করা যায় ।

  1. প্রতিটি ফোল্ডারে একটি index.tsফাইল তৈরি করুন।
  2. এই ফাইলগুলিতে ফোল্ডারের মধ্যে প্রতিটি ফাইল পুনরায় এক্সপোর্ট করুন।

উদাহরণ

আপনার ক্ষেত্রে, প্রথমে একটি ফাইল তৈরি করুন 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";

এই অতিরিক্ত ফাইলগুলি বজায় রাখা আরও সামান্য কাজ হিসাবে কাজ করা ( ব্যারেল-রক্ষণাবেক্ষণকারী ব্যবহার করে কাজটি মুছে ফেলা যায়) তবে আমি খুঁজে পেয়েছি যে এটি কম কাজ করে শেষ পর্যন্ত পরিশোধ করে। প্রধান ডিরেক্টরি কাঠামোর পরিবর্তনগুলি করা আরও সহজ এবং এটি আপনাকে যে পরিমাণ আমদানি করতে হয় তার সংখ্যা হ্রাস করে।

সতর্ক করা

এটি করার সময় আপনাকে কয়েকটি জিনিস দেখতে হবে এবং করতে পারবেন না:

  1. বিজ্ঞপ্তি পুনরায় রফতানির জন্য আপনাকে দেখতে হবে। সুতরাং যদি দুটি সাব-ফোল্ডারে থাকা ফাইলগুলি একে অপরকে রেফারেন্স করে, তবে আপনাকে পুরো পথটি ব্যবহার করতে হবে।
  2. একই মূল ফোল্ডার থেকে কোনও ফোল্ডার ফিরে পাওয়া উচিত নয় (উদাহরণস্বরূপ, বৈধতা ফোল্ডারে কোনও ফাইলে থাকা এবং করছেন import {XyService} from "../validation";)। আমি এটি পেয়েছি এবং প্রথম পয়েন্টটি আমদানি সংজ্ঞায়িত না হওয়ার ত্রুটির দিকে পরিচালিত করতে পারে।
  3. অবশেষে আপনার কাছে একই নামে একটি সাব-ফোল্ডারে দুটি রফতানি থাকতে পারে না। সাধারণত এটি কোনও সমস্যা নয়।

4
@ থমাসজুবার্বহেলার আমি টাইপস্ক্রিপ্ট ১.৮ তে ভাবি যা উপলভ্য হবে ( এখানে দেখুন )।
ডেভিড শেরেট

4
এনপিএম দিয়ে টাইপস্ক্রিপ্ট ২.০+ কীভাবে ডাউনলোড করতে পারি?
ম্যাক্সিমিডেপ্রে

4
একটি ছোট্ট টিপ - ডকুমেন্টেশন পড়ার পরে দেখা গেল যে এটি baseUrl'tsconfig.json' এর অবস্থানের সাথে সম্পর্কিত। সুতরাং আমাদের ক্ষেত্রে (কৌণিক প্রয়োগ) মানটি হওয়া উচিত "baseUrl": "./app",, যেখানে "অ্যাপ" অ্যাপ্লিকেশনটির মূল of
পাভেল গর্কিজনস্কি

10
কেবল কৌণিক-ক্লাই্ট ব্যবহারকারীগণ : আপনি যদি কৌণিক-ক্লিপ 2+ ব্যবহার করেন তবে তারা ওয়েবপ্যাক এবং ব্ল্যাকবক্সযুক্ত ওয়েবপ্যাক.কনফিগ.জেএস (নোড_মডিউলগুলির ভিতরে) এ স্যুইচ করে। "সেখান থেকে, এই আমদানির নামগুলি সমর্থন করার জন্য আপনি যে কোনও মডিউল লোডার ব্যবহার করছেন তা কনফিগার করতে হবে।" যেহেতু ওয়েবপ্যাক.কনফিগ.জেএস ব্ল্যাকবক্সড, আপনি এই টুকরোটি করতে পারবেন না। ভাগ্যক্রমে, আমি দেখতে পেয়েছি যে সমস্যাটি ইতিমধ্যে এখানে প্রতিবেদন করা হয়েছে এবং এই জনসংযোগ দ্বারা সমাধান করা হয়েছেটিএল; ডিআর ব্ল্যাকবক্সযুক্ত ওয়েবপ্যাক কনফিগারেশন এখন tsconfig.json দেখার জন্য যথেষ্ট স্মার্ট।
কেভিন

4
কৌণিক-ক্লাইম ব্যবহারকারীদের জন্য, আপনি "এনজি ইজেক্ট" দিয়ে একটি ওয়েবপ্যাক.কনফিগ তৈরি করতে পারেন। নোট করুন যে আপনাকে প্রকল্পটি পরিবেশন করতে সক্ষম হতে।
দ্রসন্তিয়া

14

Tsconfig.json এ নীচে কনফিগারেশন ব্যবহার করা ভাল

{
  "compilerOptions": {
    "...": "reduced for brevity",

    "baseUrl": "src",
    "paths": {
      "@app/*": ["app/*"]
    }
  }
}

Angতিহ্যগত উপায় কৌণিক 6 এর আগে:

`import {XyService} from '../../../services/validation/xy.service';`

এগুলিতে রিফ্যাক্টর করা উচিত:

import {XyService} from '@app/services/validation/xy.service

স্বল্প ও মধুর!


এই পরিবর্তনটি @ শিবাংগুপ্ত প্রযোজনায় কাজ করে না
বেনামে

1

আমি এই প্রশ্নটি পেরিয়ে এসেছি। আমি জানি এখনই এটি ফিরে এসেছে তবে যে কেউ এটির সামনে আসার জন্য একটি সহজ উত্তর রয়েছে।

আমি কেবলমাত্র পেরিয়ে এসেছি কারণ আমি দীর্ঘদিন যা কিছু করছিলাম তা কাজ বন্ধ করে দিয়েছে এবং আমি ভাবছিলাম যে কৌণিক 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';

অ্যাংুলার-সিএলআই আসার পর থেকে এটি আমার পক্ষে বেশ কাজ করেছে।


ক্রিসের প্রচেষ্টার জন্য ধন্যবাদ, তবে আপনার উত্তরটিতে ব্যবহারের উদাহরণ দেওয়া উচিত ছিল!
জর্জে 43g
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.