সুরকারের স্থানীয় প্যাকেজ দরকার


110

আমি বেশ কয়েকটি গ্রন্থাগার পেয়েছি [ফু ও বার] যা আমি কনসার্টে বিকাশ করি তবে প্রযুক্তিগতভাবে পৃথক পৃথক জিনিস। পূর্বে আমি কেবল অটোলোডারকে পছন্দ করতে পুনরায় সংজ্ঞায়িত করেছি "Foo\\": "../Foo/src", তবে এখন আমি ফু-তে একটি গুজল নির্ভরতা যুক্ত করেছি, বার এটি idাকনা ফেলেছে কারণ এটি এর নির্ভরতাগুলির মধ্যে একটি নয়।

ডিরেক্টরি কাঠামো:

/home/user/src/
    Foo/
        src/
            FooClient.php
        composer.json
    Bar/
        src/
            BarClient.php
        composer.json

তাত্ত্বিক অটোলোয়াড বিবৃতি: [বার / কম্পোজার.জেসনে]

"require": {
    "local": "../Foo/composer.json"
}

উদাহরণ কোড:

require('vendor/autoload.php');

$f = new \Bar\BarClient(new \Foo\FooClient());

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

উত্তর উত্তর সম্পাদনা:

ইনফমানিয়াককে ধন্যবাদ আমি নিম্নলিখিতগুলি করেছি:

গিট রেপোর সূচনা:

cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"

সুরকারের কনফিগারেশন যুক্ত করেছে:

"require": {
    "sammitch/foo": "dev-master"
},
"repositories": [{
    "type": "vcs",
    "url": "/home/sammitch/src/Foo"
}],

আর তারপরে composer update!


এই জেসন কীভাবে "সামিট / ফু" এবং "/ বাড়ি / সমমিত / এসআরসি / ফু" এর ঠিকানাটির মধ্যে পরিচয় নির্দিষ্ট করে? এটি কোনও সম্মেলন অনুসরণ করছে?
সেবাস্তিয়ান গ্রিগনোলি

@ সেবাস্তিয়ান গ্রিগনালি sammitch/fooহ'ল প্যাকেজের নাম এবং এটি যেখানে রয়েছে সেখানে আক্ষরিকভাবে কিছুই করার নেই। এটির কনফিগার করা রেপগুলির উপর ভিত্তি করে উপলভ্য প্যাকেজগুলির একটি তালিকা তৈরি করবে, এক্ষেত্রে নির্দিষ্ট স্থানীয় গিট রেপো থেকে কমপোজার.জেসন আনার, এবং তারপরে সুরকার বাকী অংশগুলি পরিচালনা করে। sammitch/fooপ্যাকেজ বর্তমান অ্যাপ্লিকেশনের তে অনুলিপি করা vendorফোল্ডারের অন্য কোন প্যাকেজ হিসাবে একই।
সম্মিত

ওহ, আমি এখন এটি পেয়েছি বলে মনে করি। এটি কেবল একটি কাস্টম রেপো, যেমন এপিটি-র মতো, "সামিট / ফু" প্যাকেজটি থাকতে পারে। আমি কি ঠিক পেয়েছি?
সেবাস্তিয়ান গ্রিগনোলি

@ সেবাস্তিয়ান
গ্রিগনলি

উত্তর:


40

আপনি সুরকারের সংগ্রহস্থল বৈশিষ্ট্যটি ব্যবহার করতে পারেন

https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository

HTTP ফর্ম্যাটটি ব্যবহার করার পরিবর্তে ডিস্কে একটি ফাইল পাথ নির্দিষ্ট করুন।



12
getcomposer.org/doc/05-repositories.md#path টিও সম্ভাব্যভাবে দরকারী এবং আমার পক্ষে আরও ভাল কাজ করেছে বলে মনে হচ্ছে।
জুঁই হেগম্যান

পছন্দ করেছেন আমি এটিও ব্যবহার করেছি - উন্নয়নের জন্য দুর্দান্ত
ড্যানি কোপিং

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

186

স্থানীয়, ইন-ডেভলপমেন্ট প্যাকেজটিতে লিঙ্ক করার উপায়টি হ'ল প্রথমে আপনার মূল প্রকল্পের composer.jsonএকটি সংগ্রহস্থলের মধ্যে যুক্ত করা:

"repositories": [
    {
        "type": "path",
        "url": "/full/or/relative/path/to/development/package"
    }
]

আপনার বিকাশ প্যাকেজের একটি সংস্করণ নির্দিষ্ট composer.jsonকরতে হবে বা আমি যেভাবে করি তা হল এই জাতীয় প্যাকেজটি ব্যবহার করে প্রয়োজনীয় প্রয়োজন @dev:

composer require "vendorname/packagename @dev"

এটি আউটপুট করা উচিত:

- Installing vendor/packagename (dev-develop)
Symlinked from /full/or/relative/path/to/development/package

@devপ্রয়োজন কমান্ড হয় গুরুত্বপূর্ণ, সুরকার এই পিক এ উত্স কোড ব্যবহার করে এবং আপনার নতুন প্যাকেজে এটা সিমবলিক লিঙ্ক।

এটি সংস্করণের সীমাবদ্ধতায় যুক্ত হওয়া একটি স্থিতিশীলতা পতাকা ( প্যাকেজ লিঙ্কটি দেখুন )।

এগুলি আপনাকে ন্যূনতম-স্থায়িত্ব সেটিংয়ের সুযোগের বাইরে কোনও প্যাকেজের স্থায়িত্বকে আরও সীমাবদ্ধ বা প্রসারিত করতে দেয়।

সর্বনিম্ন-স্থায়িত্বের পতাকাগুলি হ'ল:

উপলব্ধ অপশন (স্থায়িত্ব ক্রমানুসারে) হয় dev, alpha, beta, RC, এবং stable


8
দ্রষ্টব্য, যে আপনাকে সুরকার দ্বারা কোনও নির্দেশিকা নির্ধারণের অনুমতি দেওয়া হয়নি যা একই ডিরেক্টরিতে কম্পোজারের জেএসন স্থাপন করেছে specify
ম্যাপেপিআর

মজার বিষয়, ম্যাপেপিআর আমি এটি জানতাম না। যাইহোক, আমি অনুমান করি যে সমস্ত ওয়েব ফ্রেমওয়ার্কগুলি ইতিমধ্যে সমস্ত "নির্ভরতা" ফোল্ডারে সমস্ত নির্ভরতা স্থাপন করে এটি যত্ন করে রাখে? Yii2 কমপক্ষে এটি করে।
ধিরাজ গুপ্ত

4
composer require "vendorname/packagename @dev"অনুবাদ "require":{ "vendorname/packagename": "@dev" }আপনার অ্যাপ্লিকেশনের composer.json যদি আপনি সুরকার ইনস্টল চালাতে চান
Sir_Faenor

4
অনুগ্রহ করে এটি যুক্ত করুন: সুরকার কনফিগার repositories.local পাথ / পূর্ণ / বা / আপেক্ষিক / পথ / থেকে / বিকাশ / প্যাকেজ সংগ্রহস্থল যোগ করার সঠিক উপায় হিসাবে
বেসিল

4
কোনও সুরকারকে সিমলিঙ্ক তৈরি না করে প্রোডের জন্য বিক্রেতাদের ফোল্ডারে এটি ইনস্টল করার জন্য সুরকারকে কী বলা সম্ভব?
বেনিয়ামিন

8

কিছু সময় ব্যয় করার পরে, আমি শেষ পর্যন্ত সমাধানটি বুঝতে পারি। হতে পারে এটি আমার মতো কারও পক্ষে কার্যকর হবে এবং কিছুটা সময় সাশ্রয় করবে, তাই আমি সিদ্ধান্ত নিয়েছি যে এটি এখানে ভাগ করে নিতে হবে।

ধরে নিলাম আপনার নিম্নলিখিত ডিরেক্টরি কাঠামো রয়েছে (আপনার প্রকল্পের মূল ডিরেক্টরিতে আপেক্ষিক):

composer.json
config
config/composition-root.php
local
local/bar-project
local/bar-project/composer.json
local/bar-project/src
local/bar-project/src/Bar.php
public
public/index.php
src
src/Foo.php

এই উদাহরণে আপনি দেখতে পারে যে localফোল্ডারের আপনার কোম্পানীর যেমন এর নেস্টেড প্রকল্পগুলির জন্য বোঝানো হয় bar-project। তবে আপনি চাইলে অন্য যে কোনও লেআউট কনফিগার করতে পারেন।

প্রতিটি প্রকল্পের নিজস্ব composer.jsonফাইল থাকতে হবে, যেমন রুট composer.jsonএবং local/bar-project/composer.json। তারপরে তাদের বিষয়বস্তু নীচে হবে:

(মূল composer.json:)

{
  "name": "your-company/foo-project",
  "require": {
    "php": "^7",
    "your-company/bar-project": "@dev"
  },
  "autoload": {
    "psr-4": {
      "YourCompany\\FooProject\\": "src/"
    }
  },
  "repositories": [
    {
      "type": "path",
      "url": "local/bar-project"
    }
  ]
}

( local/bar-project/composer.json:)

{
  "name": "your-company/bar-project",
  "autoload": {
    "psr-4": {
      "YourCompany\\BarProject\\": "src/"
    }
  }
}

যদি উদাহরণস্বরূপ, আপনি প্রতিটি প্রকল্পকে পৃথক ভাইবোন ডিরেক্টরিতে নিম্নরূপে সনাক্ত করতে চান:

your-company
your-company/foo-project
your-company/foo-project/composer.json
your-company/foo-project/config
your-company/foo-project/config/composition-root.php
your-company/foo-project/public
your-company/foo-project/public/index.php
your-company/foo-project/src
your-company/foo-project/src/Foo.php
your-company/bar-project
your-company/bar-project/composer.json
your-company/bar-project/src
your-company/bar-project/src/Bar.php

- তারপরে আপনাকে repositoriesবিভাগে সংশ্লিষ্ট ডিরেক্টরিতে লিঙ্ক করতে হবে :

  "repositories": [
    {
      "type": "path",
      "url": "../bar-project"
    }
  ]

এর পরে composer update(বা ডকসrm -rf vendor && composer update -v হিসাবেও প্রস্তাবিত ) ভুলে যাবেন না ! ফণা অধীনে, সুরকার একটি vendor/your-company/bar-projectসিমলিংক তৈরি করবে যা লক্ষ্যমাত্রায় local/bar-project(বা ../bar-projectযথাক্রমে)।

ধরে নিচ্ছেন যে আপনার public/index.phpমাত্র একটি front controller, উদাহরণস্বরূপ:

<?php
require_once __DIR__ . '/../config/composition-root.php';

তাহলে আপনার config/composition-root.phpহবে:

<?php

declare(strict_types=1);

use YourCompany\BarProject\Bar;
use YourCompany\FooProject\Foo;

require_once __DIR__ . '/../vendor/autoload.php';

$bar = new Bar();
$foo = new Foo($bar);
$foo->greet();

4
"আরএম-আরএফ বিক্রেতার / সংস্থা / প্যাকেজ" গুরুত্বপূর্ণ
অ্যালেক্স 83690

@ অ্যালেক্স 666৯০ কেবলমাত্র যদি আপনি ইতিমধ্যে composer updateএকই সাথে চালিত হন composer.jsonএবং তাই আপনাকে সুরকার দ্বারা নির্মিত পূর্ববর্তী
সিমলিংকটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.