--TEST-- Replace takes precedence only in higher priority repositories and if explicitly required --COMPOSER-- { "repositories": [ { "type": "package", "package": [ { "name": "forked/pkg", "version": "1.1.0", "replace": { "package/2": "1.1.0" } } ] }, { "type": "package", "package": [ { "name": "package/1", "version": "1.0.0" }, { "name": "package/2", "version": "1.0.0" }, { "name": "package/3", "version": "1.0.0", "require": { "forked/pkg": "*" } }, { "name": "hijacker/pkg", "version": "1.1.0", "replace": { "package/1": "1.1.0" } } ] } ], "require": { "package/1": "1.*", "package/2": "1.*", "package/3": "1.*" } } --RUN-- install --EXPECT-- Installing package/1 (1.0.0) Installing forked/pkg (1.1.0) Installing package/3 (1.0.0)