সুরকার: আমি কীভাবে পুরানোগুলি আপডেট না করে অন্য একটি নির্ভরতা ইনস্টল করতে পারি?


196

আমার কয়েকটি নির্ভরশীলতা নিয়ে একটি প্রকল্প রয়েছে এবং আমি অন্য একটি ইনস্টল করতে চাই, তবে আমি অন্যকে তাদের মতো করে রাখতে চাই। সুতরাং আমি সম্পাদনা করেছি composer.json, তবে আমি চালানো হলে composer install, আমি নিম্নলিখিত আউটপুট পেতে:

Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.

Problem 1
    - laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
    - laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
    - Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.

প্রথমত, আমি এমক্রিপ্ট ইনস্টল করেছি, সুতরাং কেন এটি সেখানে অভিযোগ করা হচ্ছে তা আমি জানি না।

সুতরাং, আমি কীভাবে এই নতুন নির্ভরতা ইনস্টল করতে পারি?

আমার সুরকার.জসন:

{
    "require": {

        "opauth/opauth": "*",
        "opauth/facebook": "*",
        "opauth/google": "*",
        "opauth/twitter": "*",

        "imagine/Imagine": "dev-develop",

        "laravel/framework": "4.*",
        "loic-sharma/profiler": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/libraries",
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/tests/TestCase.php"
        ]
    },
    "minimum-stability": "dev"
}

1
এমক্রিপ্ট সতর্কতা একাধিক পিএইচপি ইনস্টল হতে পারে… এমক্রিপট এক্সটেনশন সহ পিএইচপি আপনার পিএইচপি-
ক্লিপের

উত্তর:


293

একটি নতুন প্যাকেজ ইনস্টল করতে এবং কেবল এটিই আপনার কাছে দুটি বিকল্প রয়েছে:

  1. requireকমান্ডটি ব্যবহার করে , কেবল চালান:

    composer require new/package
    

    সুরকার ব্যবহার করতে, প্যাকেজটি ইনস্টল করতে এবং এতে যুক্ত করার জন্য সেরা সংস্করণ সীমাবদ্ধতার অনুমান করবে composer.lock

    আপনি চালিয়ে একটি স্পষ্ট সংস্করণ সীমাবদ্ধতা নির্দিষ্ট করতে পারেন:

    composer require new/package ~2.5
    

-অথবা-

  1. updateকমান্ডটি ব্যবহার করে নতুন প্যাকেজটি ম্যানুয়ালি যুক্ত করুন composer.json, তারপরে চালান:

    composer update new/package
    

যদি সুরকার অভিযোগ করেন, "আপনার প্রয়োজনীয়তাগুলি ইনস্টলযোগ্য প্যাকেজগুলির সেটগুলিতে সমাধান করা যায় না" ", আপনি পতাকাটি পেরিয়ে সমাধান করতে পারেন --with-dependencies। আপনি যে প্যাকেজটি ইনস্টল / আপডেট করার চেষ্টা করছেন তার সমস্ত নির্ভরতা শ্বেত তালিকাভুক্ত করা হবে (তবে আপনার অন্যান্য নির্ভরতাগুলির মধ্যে কোনওটি নয়)।

লারাভেল এবং এমক্রিপ্টের সাথে প্রশ্নকারীদের সমস্যা সম্পর্কিত: এটি আপনার সিএলআই php.ini এ সঠিকভাবে সক্ষম হয়েছে কিনা তা পরীক্ষা করুন। যদি php -mএমক্রিপটি তালিকাভুক্ত না করে তবে এটি অনুপস্থিত।

গুরুত্বপূর্ণ: ব্যবহার করার সময় নির্দিষ্ট করতে ভুলবেন না ! সেই যুক্তি ছাড়াই সমস্ত নির্ভরতা তেমনি আপডেট করার কারণ ঘটায় ।new/packagecomposer updatecomposer.lock


3
আমি আপডেটের জন্য তালিকাভুক্ত "প্যাকেজ [...] বার্তাটি ইনস্টল করা নেই I উপেক্ষা করা হচ্ছে" "
গেরি

11
এটি আমার পক্ষে কাজ করে না। আমাকে বলা হয়েছে আপডেটের জন্য তালিকাভুক্ত 'প্যাকেজ "x / y" ইনস্টল করা নেই। উপেক্ষা করা হচ্ছে "এবং তারপরে এটি সবকিছু আপডেট করতে চলেছে So সুতরাং এটি আমার নতুন প্যাকেজটি ইনস্টল করে না এবং এটি সমস্ত কিছু আপডেট করে, যা আমি যা চাই তার ঠিক বিপরীত
কাঁপুন

3
এটা ঠিক কাজ করে না। "আপনার প্রয়োজনীয়তা ইনস্টলযোগ্য প্যাকেজগুলির সেটগুলিতে সমাধান করা যায়নি।" (এবং কিছু পুরানো প্যাকেজ সম্পর্কে পাঠ্য, আমি যা জিজ্ঞাসা করি তার সাথে সম্পর্কিত নয়) যখন আমি কেবল একটি প্যাকেজ আপডেট করার কথা বলি।
ওজেড

@ ট্রেম্বি এখানে ঠিক কাজ করে। হতে পারে আপনি "new/package" : "*",কম্পোজার.জসন "require"বিভাগে যুক্ত করতে ভুলে গেছেন ?
পুথেরকা

@ ওজেড_ এমনকি যদি কেবলমাত্র একটি নির্ভরশীলতা ইনস্টল করতে হয় তবে এটি এখনও আপনার অন্যান্য নির্ভরতাগুলির সাথে বিরোধ না করে তা নিশ্চিত করার জন্য প্রথমে এটি সমাধান করা দরকার।
পুথেরকা

30

আসলে, সঠিক সমাধানটি হ'ল:

composer require vendor/package

সুরকারের জন্য সিএলআই ডকুমেন্টেশন থেকে নেওয়া :

requireকমান্ড নতুন প্যাকেজ যোগ composer.jsonবর্তমান ডিরেক্টরি থেকে ফাইল।

php composer.phar require

প্রয়োজনীয়তা যুক্ত / পরিবর্তন করার পরে, পরিবর্তিত প্রয়োজনীয়তা ইনস্টল বা আপডেট করা হবে।

আপনি যদি ইন্টারঅ্যাকটিভভাবে প্রয়োজনীয়তাগুলি চয়ন করতে না চান, আপনি কেবল সেগুলি কমান্ডে দিতে পারেন।

php composer.phar require vendor/package:2.* vendor/package2:dev-master

যদিও এটি সত্য যে composer updateকমপোজার জেএসসনে পাওয়া নতুন প্যাকেজগুলি ইনস্টল করে, এটি কমপোজারজলকৃত ফাইল ( >এবং *কোলনের পরে অক্ষর) অনুসারে কমপোজারজলক ফাইল এবং ইনস্টল করা প্যাকেজগুলি আপডেট করবে ! এটি ব্যবহার করে এড়ানো যেতে পারে composer update vendor/packageতবে আমি এটির অভ্যাস করার পরামর্শ দেব না, কারণ আপনি সম্ভাব্য ভাঙা প্রকল্প থেকে দূরে থাকা যুক্তিটি…

composer require vendor/packageনতুন নির্ভরতা যুক্ত করার জন্য জিনিসগুলি বুদ্ধিমান এবং স্টিক রাখুন ! 😉


তবে composer requireকম্পোজারআলক ফাইল আপডেট করবেন?
ফিল

2

আমার ব্যবহারের কেসটি সহজ, এবং কেবল আপনার শিরোনাম ফিট করে তবে আপনার বিশদ বিবরণ নয়।

অর্থাৎ, আমি একটি নতুন প্যাকেজ ইনস্টল করতে চাই যা composer.jsonঅন্য সমস্ত প্যাকেজ আপডেট না করে আমার মধ্যে নেই ।

সমাধান এখানে composer require x/y


1

আমার ক্ষেত্রে, আমার সাথে একটি রেপো ছিল:

  • প্রয়োজনীয়তা এ, বি, সি, ডি ইন .json
  • তবে কেবলমাত্র এ, বি, সি .lock

এরই মধ্যে, ল, লক তৈরি হওয়ার সময় এ, বি, সি এর সাথে নতুন সংস্করণ ছিল new

কোনও কারণে, আমি "বিক্রেতাদের" মুছে ফেলেছিলাম এবং একটি করতে চেয়েছিলাম composer installএবং বার্তাটি দিয়ে ব্যর্থ হয়েছিল:

Warning: The lock file is not up to date with the latest changes in composer.json.
You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.

আমি সেলডেক ইস্যু করে সমাধানটি চালানোর চেষ্টা করেছিলাম composer update vendorD/libraryDতবে একটি সুরকার আরও বেশি জিনিস আপডেট করার জন্য জোর দিয়েছিলেন, তাই .lockআমার গিট সরঞ্জামটি দেখে খুব বেশি পরিবর্তন ঘটেছিল।

আমি যে সমাধানটি ব্যবহার করেছি তা হ'ল:

  1. সমস্ত vendorsদির মুছুন ।
  2. অস্থায়ীভাবে VendorD/LibraryDথেকে প্রয়োজনটি সরান .json
  3. চালান composer install
  4. তারপরে ফাইলটি মুছুন .jsonএবং পুনরায় এটি পুনরায় চেকআউট করুন (ফাইলটি পুনরায় যুক্ত করার সমতুল্য, তবে সম্ভাব্য হোয়াইটস্পেসের পরিবর্তনগুলি এড়ানো)।
  5. তারপরে Seldaek এর সমাধান চালান composer update vendorD/libraryD

এটি লাইব্রেরিটি ইনস্টল করেছে, তবে এটির পরিবর্তে, gitডিফ আমাকে দেখিয়েছে যে .lockকেবলমাত্র নতুন জিনিসগুলি অন্য সম্পাদনা না করে যুক্ত করা হয়েছিল।

(পয়েন্টারটির জন্য Thnx Seldaek;))


এটি একটি ওভারকিল কেবল লক ফাইলটি মুছুন এবং সুরকার ইনস্টল করুন। এটি কাজ করে
অ্যাস্ট্রোয়ানু

6
এটি নন-প্রো পরিবেশের ক্ষেত্রে সত্যই রয়েছে, যেখানে আপনি আনন্দের সাথে নির্ভরশীলতাগুলি পুনরায় তৈরি করতে পারেন এবং যদি কোনও কিছু ভেঙে যায় তবে এটি ঠিক করুন। তবে যদি আপনার জন্য, সার্ভারগুলি ব্যর্থ হওয়ার অর্থ প্রতি ঘন্টা আপনি $ 10.000 শিথিল করেন, তবে আপনি সন্দেহ করবেন না যে composer.lockকখনই সুখে মুছে ফেলা এবং পুনর্নির্মাণ করা উচিত নয়। .lockলক করার জন্য ... ; ডি - নইলে লক ফাইলটি অকেজো হবে এবং আপনি এটি চালাচ্ছেন না বা এটি কোনও অস্তিত্বই নেই। আপনি যদি কোনও মানের ভিত্তিক সংস্থায় চালিত হন এবং 1.000 নির্ভরতা বলার সাথে পুনরায় বিল্ডিং এবং লক করেন তবে এগুলির সবই বদলে যাবে, এবং QA লোকেরা আপনাকে হত্যা করতে আসবে হাহাহাহাহা।
জাভি মন্টেরো

2
আরে @astroanu কেবল এটি পরিষ্কার করতে যে আপনি যদি পূর্বের তারিখে কোনও নির্ভরতা ইনস্টল করে থাকেন এবং এর কিছু নির্ভরতা ডেভ মাস্টারের সর্বশেষতম সংস্করণটি ধরে ফেলছে তবে কেবল কমপোজারলক মুছতে এবং কেবল ইনস্টলটি আঘাত করাতে গুরুত্বপূর্ণ সমস্যা হতে পারে। যদি নির্ভরতা প্রবর্তনের প্রভাবটি যাচাই করার সুযোগ না পান তবে অপ্রত্যাশিত ফলাফলের সম্ভাবনা রয়েছে এবং সম্ভবত ব্যবহারকারীদের জন্য দুর্বল অভিজ্ঞতা তৈরি হওয়ার সম্ভাবনা রয়েছে।
dkcwd

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