Composer: Muat otomatis file - muat vendor terlebih dahulu

Dibuat pada 30 Jul 2012  ·  11Komentar  ·  Sumber: composer/composer

Saya menggunakan pemuatan otomatis dengan pemuat file khusus. Dan saya punya masalah karena loader saya bergantung pada beberapa kelas dari vendor. Tetapi komposer membutuhkan pemuat saya sebelum pemuat vendor.

Berikut dihasilkan autoloader.php :

<?php

// autoload.php generated by Composer
if (!class_exists('Composer\\Autoload\\ClassLoader', false)) {
    require __DIR__ . '/composer' . '/ClassLoader.php';
}

return call_user_func(function() {
    $loader = new \Composer\Autoload\ClassLoader();
    $composerDir = __DIR__ . '/composer';

    $map = require $composerDir . '/autoload_namespaces.php';
    foreach ($map as $namespace => $path) {
        $loader->add($namespace, $path);
    }

    $classMap = require $composerDir . '/autoload_classmap.php';
    if ($classMap) {
        $loader->addClassMap($classMap);
    }

    $loader->register();

    require $baseDir . '/Nella/loader.php'; // <-- my libs
    require $vendorDir . '/nette/nette/Nette/loader.php'; // <-- vendor libs

    return $loader;
});

Saya perlu memuat _Nette_ sebelum libs saya (_Nella_) karena loader (_Nella_) saya memerlukan beberapa kelas dari _Nette_.

Bug

Komentar yang paling membantu

Alangkah baiknya bisa menentukan urutan. Atau bahkan lebih baik: miliki opsi tambahan untuk menentukan file yang perlu dimuat terlebih dahulu.

Use case: Mencoba untuk menimpa fungsi helper dari laravel karena mereka secara khusus didefinisikan dengan pemikiran tersebut, tetapi tidak ada cara untuk memberitahu komposer bahwa definisi saya harus datang sebelum definisi asli laravel.

Konteks: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Solusi: https://github.com/funkjedi/composer-include-files

Semua 11 komentar

@Seldaek Saya rasa urutan di sini harus menghormati urutan yang ditemukan saat menyelesaikan dependensi, sehingga file autoloading dari sebuah dependensi dimuat sebelum file dari sebuah paket bergantung padanya.

Yup itu masuk akal, tidak yakin seberapa mudah untuk mencapainya meskipun setelah dijalankan pertama kali saya pikir itu cukup acak.

Saya tidak sepenuhnya yakin saya mengerti ini? Semua autoloader akan dibutuhkan, dan urutannya tidak penting?

Sunting: tidak masalah saya mengerti :)

Solver seharusnya sudah mengembalikan ini dalam urutan yang benar dalam transaksi, termasuk kasus ketika paket sudah diinstal, jadi tidak yakin mengapa urutannya salah.

Saya baru saja mengalami masalah yang sama dengan kdyby/forms-replicator

{
    "name":"kdyby/forms-replicator",
    "require":{
        "php":">=5.3.2",
        "nette/nette":"*"
    },
    "autoload":{
        "files":["Replicator.php"]
    }
}

Urutan require dalam autoload_real.php harus sesuai dengan bagaimana paket saling membutuhkan.

Perbaikan @HosipLan digabungkan.

Bagaimana cara menandai bahwa lib kita harus dimuat terlebih dahulu?
Maksud saya, itu tidak tergantung pada yang lain, tetapi itu harus dimuat terlebih dahulu sebelum hal lain dimuat.

Saya memiliki pertanyaan yang sama dengan @onlyongunz - Saya telah menginstal apigen/apigen dan symfony/var-dumper secara global, tetapi ketika saya menggunakan dump() versi dari tracy/tracy (diperlukan oleh ApiGen) disebut. Saya ingin menggunakan versi VarDumper.

Alangkah baiknya bisa menentukan urutan. Atau bahkan lebih baik: miliki opsi tambahan untuk menentukan file yang perlu dimuat terlebih dahulu.

Use case: Mencoba untuk menimpa fungsi helper dari laravel karena mereka secara khusus didefinisikan dengan pemikiran tersebut, tetapi tidak ada cara untuk memberitahu komposer bahwa definisi saya harus datang sebelum definisi asli laravel.

Konteks: https://laracasts.com/index.php/discuss/channels/general-discussion/override-functions-in-supporthelpersphp

Solusi: https://github.com/funkjedi/composer-include-files

Saya pikir saya akan menyarankan load_first untuk memprioritaskan paket saat dimuat ketika tidak bergantung pada pustaka lain (kecuali itu php atau yang lain), dan menambahkan --ignore-order untuk mengabaikan load_first .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat