A path repository symlinks a local directory into vendor, so a change to the package is visible immediately without a version, a tag or a push.
{
"repositories": [
{ "type": "path", "url": "../turkerdev-orders" }
],
"require": { "turkerdev/orders": "*" }
}
// composer symlinks rather than copying, when it can.
// "options": { "symlink": false } forces a copy, which is
// what a Docker build usually needs.
The symlink is what makes it useful and what breaks in a container, because the target is outside the build context — which is why the copy option exists and why a development compose file usually mounts the package directory instead. The repository entry must be removed before release, and a lock file committed with a path repository in it will fail on every machine that does not have the directory.