จะระบุเส้นทางการติดตั้ง Composer ได้อย่างไร?


97

ฉันมีคำจำกัดความนี้:

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "symfony/sfGuardPlugin",
                "version": "4.0.2",
                "dist": {
                    "url": "http://plugins.symfony-project.org/get/sfGuardPlugin/sfGuardPlugin-4.0.2.tgz",
                    "type": "tar"
                }
            }
        }
    ],
    "require": {
        "symfony/sfGuardPlugin": "4.0.*"
    }
}

ฉันใช้ Symfony 1 plugins/sfGuardPlugin/และฉันต้องการที่จะติดตั้งใน ฉันจะระบุสิ่งนี้ได้อย่างไร?

คำตอบ:


145

ดูเหมือนว่าคุณสามารถกำหนดvendordir ให้เป็นอย่างอื่นได้ ( pluginsในกรณีของคุณ):

{
    "config": {
        "vendor-dir": "plugins"
    }
}

จากนั้นคุณอาจเปลี่ยนชื่อแพ็กเกจให้ไม่มีระดับ dir อยู่ข้างในเช่น:

        "package": {
            "name": "sfGuardPlugin",

ดังนั้นคุณcomposer.jsonควรมีลักษณะดังนี้:

{
    "config": {
        "vendor-dir": "plugins"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "sfGuardPlugin",
                "version": "4.0.2",
                "dist": {
                    "url": "http://plugins.symfony-project.org/get/sfGuardPlugin/sfGuardPlugin-4.0.2.tgz",
                    "type": "tar"
                }
            }
        }
    ],
    "require": {
        "sfGuardPlugin": "4.0.*"
    }
}

แก้ไข

เมื่อใช้การกำหนดค่านี้คุณจะได้รับเส้นทาง (ซึ่งแน่นอนว่าไม่ดีสำหรับ symfony):

ปลั๊กอิน / sfGuardPlugin / sfGuardPlugin-4.0.2 /

ฉันพบวิธีแก้ปัญหานี้composer.json:

{
    "config": {
        "vendor-dir": "plugins"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "sfGuardPlugin",
                "version": "4.0.2",
                "source": {
                    "url": "http://svn.symfony-project.com/plugins/sfGuardPlugin/",
                    "type": "svn",
                    "reference": "branches/1.3/"
                }
            }
        }
    ],
    "require": {
        "sfGuardPlugin": "4.0.*"
    }
}

ดีฉันสามารถสร้างมันขึ้นมาได้อย่างไรเพื่อให้โฟลเดอร์ที่แยกออกมาไม่ลึกเท่าตอนนี้: plugins/sfGuardPlugin/sfGuardPlugin-4.0.2/ฉันต้องการแทนได้plugins/sfGuardPluginไหม
ทาวเวอร์

ใช่เพิ่งเห็นว่า ฉันกำลังลองใช้ประเภทอื่น (แทนtar)
j0k

ใช้งานได้ดี - ดังนั้นพวกเขาจึงยังคงมีที่เก็บอยู่ :)
ทาวเวอร์

3
มีวิธีระบุ dir ผู้ขายสำหรับแพ็คเกจเฉพาะบางชุดเท่านั้นและปล่อยให้รายการอื่นเป็นค่าเริ่มต้นหรือไม่
mr1031011

1
นี่เป็นคำตอบที่ยอดเยี่ยมและได้รับการวิจัย แต่อย่าปล่อยให้ V. ของอดัมหลุดเพราะมันดูเป็นทางการมากขึ้นโอ้และง่าย ;-)
mTorres

28

คุณยังสามารถใช้โปรแกรมแต่ง / ตัวติดตั้งซึ่งเป็นโปรแกรมติดตั้งไลบรารีคอมโพสิตหลายเฟรมเวิร์กที่มีประเภทแพ็กเกจ "symfony1-plugin" นี่คือลักษณะของไฟล์ composer.json ของฉันเพื่อให้สามารถติดตั้งทั้ง Symfony 1.4 (ใน lib / vendor) และปลั๊กอินใน (/ plugins):

{
    "config": {
        "vendor-dir": "lib/vendor"
    },
    "repositories": {
        "symfony": {
            "type": "package",
            "package": {
                "name": "symfony/symfony1",
                "version": "1.4",
                "dist": {
                    "url": "https://github.com/symfony/symfony1/zipball/1.4",
                    "type": "zip"
                }
            }
        },
        "sfResquePlugin" : {
            "type": "package",
            "package": {
                "name": "devpips/sfResquePlugin",
                "type": "symfony1-plugin",
                "version": "0.1",
                "dist": {
                    "url": "https://github.com/devpips/sfResquePlugin/zipball/master",
                    "type": "zip"
                }
            }
        }
    },
    "require": {
        "composer/installers": "dev-master",
        "symfony/symfony1": "1.4",
        "devpips/sfResquePlugin":"0.1"
    }
}

ฉันไม่เห็นว่าสิ่งนี้จะชี้ไปที่อะไร/plugins- คุณสามารถอธิบายเพิ่มเติมได้ไหม
Isaac Lubow

@IsaacLubow สิ่งนี้จะทำตามcomposer-installersแพ็คเกจเนื่องจากsymfony1มีปลั๊กอินอยู่ที่นั่น :) ตรวจสอบSymfony1Installer.php
วิญญาณ

11

ดูCOMPOSER_VENDOR_DIRตัวแปรสภาพแวดล้อม

ด้วยการตั้งค่า var นี้คุณสามารถทำให้ Composer ติดตั้งการอ้างอิงลงในไดเร็กทอรีอื่นที่ไม่ใช่ผู้ขาย

จะมีประโยชน์ในกรณีที่คุณต้องการลบล้างสิ่งนี้ในสภาพแวดล้อมเฉพาะเช่นคนจรจัดหรือนักเทียบท่าที่คุณไม่ต้องการให้อยู่ในโฟลเดอร์ / ไดรฟ์ข้อมูลที่แชร์

และอย่างที่คุณ J0k กล่าวมีvendor-dirในconfigส่วนของcomposer.json

ค่าเริ่มต้นเป็นผู้ขาย คุณสามารถติดตั้งการอ้างอิงลงในไดเร็กทอรีอื่นได้หากคุณต้องการ $ HOME และ ~ จะถูกแทนที่ด้วยพา ธ ของโฮมไดเร็กทอรีของคุณใน vendor-dir และตัวเลือก * -dir ทั้งหมดด้านล่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.