Use the replace attribute to avoid Composer dependency conflicts
The following tutorial column will introduce you to the method of using the replace attribute to avoid dependency conflicts in Composer. I hope it will be helpful to friends in need! The Composer documentation provides two basic examples. I'll try to explain:
List the packages that were replaced by this package. This way, you can fork a package and publish it under a different name with your own version number, and packages that require the original package can continue to use your forked package because it replaces the original package.
Assume your software usesother/packageoriginal/library
and
, which themselves require original/library
. Now you think
original/library
needs to integrate new features, but the maintainers don't agree with your suggestion to be implemented in their package. So you decide to fork the library under the name
and mark it as a new release. Back to the software. Of course, it should start using the
better/library
package, so use that instead, but
still requires original/library
- code duplication! How do you make that package use your better/library
instead of original/library
? Instead of forking it and just modifying composer.json (you're still compatible with original/library
so it should work)? You need to add the replace keyword in
composer.json
:
"replace": { "original/library":"1.0.2" }
Now Composer knows that when resolving the dependency of "other/package", any changes from "better" /library" packages are as good as "original/library".
Same rule, just a slightly different perspective: Bringing in the framework's components is a good way to go for any other component that needs some functionality. However, if you need a complete framework in your software, and another library requires a component of that framework, the framework'sreplace
declaration saves Composer from having to install that single component twice because it's already included in in a complete frame.
Note: placeholders in replacement versions are generally bad
In my original answer, I suggested: "replace": {
"original/library":"1.*"
}
library is still active and declares that it can be replaced Any version
1*,, even if you don't update anything internally - it won't be done, but if you don't do any work, your old code will never implement the new functionality of the original library, But the replacement content illustrates exactly that. So, essentially: avoid using wildcard versions in replacement versions! If you use them, you are making statements about the future that you cannot know or predict (unless you have control over original/library
, but even then be very careful). Be sure to use
that you know and can completely reimplement. Original address: https://stackoverflow.com/questions/18882201/how-does-the-replace-property-work-with-composer
The above is the detailed content of Use the replace attribute to avoid Composer dependency conflicts. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Composer provides advanced features, including: 1. Aliases: define convenient names for packages for repeated reference; 2. Scripts: execute custom commands when installing/updating packages, used to create database tables or compile resources; 3. Conflict resolution: use priorities Rules, satisfaction constraints, and package aliases resolve the different requirements of multiple packages for the same dependency version to avoid installation conflicts.

How to convert PHP array to object: use stdClass class, use json_decode() function, use third-party library (such as ArrayObject class, Hydrator library)

Answer: PHP microservices are deployed with HelmCharts for agile development and containerized with DockerContainer for isolation and scalability. Detailed description: Use HelmCharts to automatically deploy PHP microservices to achieve agile development. Docker images allow for rapid iteration and version control of microservices. The DockerContainer standard isolates microservices, and Kubernetes manages the availability and scalability of the containers. Use Prometheus and Grafana to monitor microservice performance and health, and create alarms and automatic repair mechanisms.

PHP code version control: There are two version control systems (VCS) commonly used in PHP development: Git: distributed VCS, where developers store copies of the code base locally to facilitate collaboration and offline work. Subversion: Centralized VCS, a unique copy of the code base is stored on a central server, providing more control. VCS helps teams track changes, collaborate and roll back to earlier versions.

PHPCI/CD is a key practice in DevOps projects that automates the build, test, and deployment processes to improve development efficiency and software quality. A typical PHPCI/CD pipeline consists of the following stages: 1) Continuous Integration: Whenever the code changes, the code is automatically built and tested. 2) Continuous deployment: Speed up delivery by automatically deploying tested and integrated code to the production environment. By implementing the PHPCI/CD pipeline, you can increase development efficiency, improve software quality, shorten time to market, and improve reliability.

Using Redis cache can greatly optimize the performance of PHP array paging. This can be achieved through the following steps: Install the Redis client. Connect to the Redis server. Create cache data and store each page of data into a Redis hash with the key "page:{page_number}". Get data from cache and avoid expensive operations on large arrays.

There are three main technologies for visualizing data structures in PHP: Graphviz: an open source tool that can create graphical representations such as charts, directed acyclic graphs, and decision trees. D3.js: JavaScript library for creating interactive, data-driven visualizations, generating HTML and data from PHP, and then visualizing it on the client side using D3.js. ASCIIFlow: A library for creating textual representation of data flow diagrams, suitable for visualization of processes and algorithms.

Answer: Use PHPCI/CD to achieve rapid iteration, including setting up CI/CD pipelines, automated testing and deployment processes. Set up a CI/CD pipeline: Select a CI/CD tool, configure the code repository, and define the build pipeline. Automated testing: Write unit and integration tests and use testing frameworks to simplify testing. Practical case: Using TravisCI: install TravisCI, define the pipeline, enable the pipeline, and view the results. Implement continuous delivery: select deployment tools, define deployment pipelines, and automate deployment. Benefits: Improve development efficiency, reduce errors, and shorten delivery time.
