# shareStrategy

- Type: `'version-first' | 'loaded-first'`
- Required: No
- Default: `'version-first'` (set by webpack plugin/bundler runtime)

Control the loading strategy of shared dependencies:

- `'version-first'`: Version priority, ensuring that the highest version of shared dependencies is used. **All remotes entry files will be automatically loaded during initialization** to register shared dependencies and ensure version compatibility. This strategy is recommended when there are strict version requirements.

- `'loaded-first'`: Prioritize reuse of already loaded shared dependencies. Remotes are loaded on-demand rather than during initialization. This strategy is recommended when you want to reuse loaded dependencies for performance.

:::warning Offline Remote Considerations

The `'version-first'` strategy automatically loads remote entry files during application startup to initialize shared dependencies. If any remote is offline or unreachable, this will trigger the `errorLoadRemote` hook with `lifecycle: 'beforeLoadShare'` during startup. Without proper error handling, this can cause application initialization failures.

The `'loaded-first'` strategy defers remote loading until modules are actually requested, which means offline remotes only cause failures when those specific remotes are accessed, not during application startup.

**What happens with version-first and offline remotes:**

1. During initialization, remotes are loaded via `initializeSharing()`
2. If remote manifest/entry is offline, `module.getEntry()` fails
3. `errorLoadRemote` hook is called with `lifecycle: 'beforeLoadShare'`
4. If no fallback is provided, the initialization may hang or fail

**Required error handling for version-first:**

```ts
const plugin = {
  name: 'offline-resilient-plugin',
  errorLoadRemote(args) {
    if (args.lifecycle === 'beforeLoadShare') {
      // Handle version-first offline remote during startup
      return {
        init: () => Promise.resolve(),
        get: (module) => () => Promise.resolve(() => 'Offline Fallback')
      };
    }
  }
};
```

For production applications with potential network issues, consider:

- Using `'loaded-first'` strategy for better resilience
- Implementing comprehensive error handling for `'beforeLoadShare'` lifecycle
- Adding retry mechanisms via plugins
- Using proper error boundaries and fallback components

See [Error Load Remote Solutions](/blog/error-load-remote.md) for detailed offline handling strategies.

:::
