সুরকারে কোনও নির্দিষ্ট প্রতিশ্রুতি সঠিকভাবে কীভাবে প্রয়োজন যাতে এটি নির্ভর প্যাকেজগুলির জন্য উপলব্ধ থাকে?


108

আমার কাছে একটি গ্রন্থাগার রয়েছে foo/foo-libযা requiresগিটহাবের একটি নির্দিষ্ট প্রতিশ্রুতি:

{
    "name": "foo/foo-lib",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/KnpLabs/Gaufrette.git"
        }
    ],
    "require": {
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

এবং এটি ঠিক কাজ করে:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)                                 
  - Updating knplabs/gaufrette dev-master (2633721 => 2633721)
    Checking out 2633721877cae79ad461f3ca06f3f77fb4fce02e

Generating autoload files

তবে যখন অন্য প্রকল্পে আমার সেই লাইব্রেরি দরকার হয়:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master"
    }
}

এটি নির্ভরতা ত্রুটি দেয়:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for foo/foo-lib dev-master -> satisfiable by foo/foo-lib[dev-master].
    - foo/foo-lib dev-master requires knplabs/gaufrette dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e -> no matching package found.

সুতরাং আমার প্রশ্নটি হল: requireআমার লাইব্রেরিতে গিটহাব থেকে নির্দিষ্ট প্রতিশ্রুতিটি কীভাবে সঠিকভাবে করা যায়, যাতে এটি নির্ভর প্যাকেজগুলিতে উপলব্ধ হয়?


3
সচেতন থাকুন যে কোনও অঙ্গীকারের প্রয়োজন হলে, সুরকার প্রয়োজনীয়তাগুলি (সেমিওপোজার.জসন) সম্মতি দেয় না। পরিবর্তে এটি শাখা প্রধানের প্রয়োজনীয়তা গণনা করে যা সময়ের সাথে সাথে পরিবর্তিত হয়। সুতরাং এটি কিছু সময়ের জন্য কাজ করতে পারে তবে ভবিষ্যতে নিশ্চিতভাবে এটি ভেঙে যাবে।
ইস্তানি

উত্তর:


157

devআপনার লাইব্রেরি এবং আপনার অ্যাপ্লিকেশন উভয়েই একটি পতাকা সহ, আপনাকে অবশ্যই স্পষ্টভাবে গ্যাফ্রেট লাইব্রেরির প্রয়োজন হবে । অ্যাপ্লিকেশনটিতে এই জাতীয় কিছু কাজ করা উচিত composer.json:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master",
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

ডকুমেন্টেশন থেকে :

যদি আপনার কোনও নির্ভরতার কোনও অস্থির প্যাকেজের উপর নির্ভরতা থাকে তবে আপনার পর্যাপ্ত স্থায়িত্ব পতাকার পাশাপাশি আপনাকে স্পষ্টভাবে এটিও প্রয়োজন।

ডকুমেন্টেশনটিও পরামর্শ দেয় যে আপনাকে গৌফ্রেটির জন্য আপনার bar/bar-appসুরকার ফাইলে অন্তর্ভুক্ত করতে হবে, যদিও মনে হয় যে এই ক্ষেত্রে এটি প্রয়োজনীয় ছিল না। আমি নিশ্চিত না কেন।


আমি ইতিমধ্যে এটি চেষ্টা করেছি, কাজ করে না। আমি মনে করি এটির বিশেষত গিটহাবের ওপরে সুরকার প্যাকেজগিস্টের সাথে কোনও সম্পর্ক থাকতে পারে?
ম্যাকিয়েজ এসজেড

নাহ, আমি আমার স্থানীয় সংগ্রহস্থলগুলির সাথে চেক করেছি - এটি কোনও গিটহাব নির্দিষ্ট সমস্যা নয়।
ম্যাকিয়েজ এসজেড

আমি মোটামুটি নিশ্চিত যে আমি এটি আগে কাজ করতে পেয়েছিলাম। কি আপনি যোগ যদি "minimum-stability": "dev"করতে bar/bar-appপ্রয়োজনীয়তা?
ক্রিস

3
এটা তোলে দেখে মনে হচ্ছে আপনি আছে চলুন মত স্পষ্টভাবে উভয় আপনার লাইব্রেরি, এবং আপনার অ্যাপ্লিকেশনের মধ্যে যে হ্যাশ এ Gaufrette প্রয়োজন। "যদি আপনার কোনও নির্ভরতা যদি অস্থির প্যাকেজের উপর নির্ভরশীলতা থাকে তবে আপনার পর্যাপ্ত স্থায়িত্ব পতাকার পাশাপাশি আপনাকে স্পষ্টভাবে এটিও প্রয়োজন।" মনে রাখবেন যে আপনার কাছে কিছু প্যাকেজ থাকতে পারে, যেমন গফ্রেট, devস্থিতিশীলতায় এবং stableঅন্য কিছুর জন্য ডিফল্ট ।
ক্রিস

2
দেখে মনে হচ্ছে গিটহাবটি সুরকার দ্বারা বাক্সের বাইরে রয়েছে - আমি "url": "https://github.com/KnpLabs/Gaufrette.git"প্রথম প্যাকেজটি সবে সরিয়েছি এবং এটি এখনও কার্যকর।
ম্যাকিয়েজ এসজেড

15

আপনি কমান্ড লাইনে এটি কীভাবে করবেন:

composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies

আপনাকে পুরো হ্যাশ ব্যবহার করতে হবে না, একটি হ্যাশ সাতটি অক্ষর লম্বা বলে মনে হচ্ছে কৌশল অবলম্বন করছে। উপরে উল্লিখিত হিসাবে, আপনার প্রকল্পের ডেভ সমর্থন করা প্রয়োজন - যা এটি ইতিমধ্যে সেট না করা সম্পর্কে অভিযোগ করবে। এছাড়াও, --with-dependenciesআপনি যে আপডেট করছেন তার কোনও নির্ভরতা পেতে ব্যবহার করুন ।


0

আপনি যদি গিট রিপোজিটরির জন্য জোর করে পরিবর্তন করে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনি প্যাকেজটির নামটি প্যাকেজের নিজস্ব রচয়িতা জেসন ফাইলে সংজ্ঞায়িত করা হয়েছে - সুতরাং আমি প্যাকেজটি আমার নিজের জোশুয়াপলিং গিথুব অ্যাকাউন্টে স্বাক্ষর করেছি এবং এবং প্যাকেজটি এখন https://github.com/joshuapaling/Cake-Resque.git URL- এ বাস করছে , যা সুরকার দৃষ্টিকোণ থেকে প্যাকেজের নামটিকে মোটেই প্রভাবিত করতে পারেনি।

একটি বোকা ত্রুটি - তবে আমি সুরকারে নতুন, এবং এটি প্রথমে পরিষ্কার ছিল না! সুতরাং, আমি আশা করি এটি একই সমস্যার সাথে অন্য কাউকে সহায়তা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.