id | title | permalink | layout | category | prev | next |
---|---|---|---|---|---|---|
removing-components |
Remove & Deprecate Components |
docs/removing-components.html |
docs |
Organizing Components |
organizing-components.html |
installing-components.html |
Refactoring code often causes components to become obsolete or irrelevant. This is where removing and deprecating components becomes useful and necessary.
Each collection has an internal cache for its dependencies. But this does not mean that removing components is not dangerous. Due to the fact, that package managers don't always use cache. It may break builds that rely on deleted content. Deprecating a component means that Bit marks it as obsolete. Deprecated components are still available to consumers.
To remove a component from a remote Collection, specify the full component ID.
$ bit remove username.your-collection/foo/bar
successfully removed components:
username.your-collection/foo/bar
To better understand how Bit handles deleted components, let's follow this example:
- The
left-pad
in theutils
collection. - A component
trim-right
depends onleft-pad
and is also inutils
collection. - A component
login
also depends onleft-pad
but is in another collection -onboarding
.
This is what happens if we remove left-pad
:
- Bit notifies that
trim-right
depends onleft-pad
. If we want to remove it, Bit asks to use the --force flag. This is because collections don't cache their components. - The
trim-right
component has a missing dependencyleft-pad
. A refactor fortrim-right
is critical for it to work. login
that also depends onleft-pad
is not affected by the removal ofleft-pad
. This is because collections keep a cache of external dependencies.- It is still possible to source
login
to another consumer project, as the cache works for Bit. - Installing
login
using npm fails because npm tries to installleft-pad
from its original collection.
Removing a local component has no ripple effects. This is only relevant to the consuming project. To do so specify the component ID to remove.
$ bit remove foo/bar
successfully removed components:
foo/bar
Bit triggers a warning when trying to remove modified components. Use the --force
flag to force it.
Other components in the workspace may depend on removed components. Meaning that removing these dependencies affects dependent components. There are several cases which may occur when deleting a local component:
- A new component that depends on a removed component is not affected. This is because Bit did not isolate the component.
- A staged component that depends on a removed component causes Bit to stop the remove command. To force it, we use the
--force
flag. - An exported component that depends on a local removed component is not affected. This is because an exported component is isolated and immutable. So deleting a local dependency does not affect.
To deprecate a component in a remote Collection, specify the full component ID and use the --remote
option.
$ bit deprecate username.your-collection/foo/bar --remote
deprecated components: username.your-collection/foo/bar
To deprecate a component in a workspace, specify the component ID.
$ bit deprecate foo/bar
deprecated components: foo/bar