In the darker days of web application development, we essentially had two options for working with dependencies. The first is that we could put all the dependencies in a directory of our application and use them from there.
The other option was to rely on shared dependencies installed on the server using something like Pear.
It allows us to declare the dependencies that our project requires and it will automatically determine all the dependencies of our dependencies.
Once we’ve installed our dependencies locally, Composer will lock those dependencies into a specific version so we can install the same versions on any number of computers easily.