developit / developit/microbundle

Officially support more elaborate externals

Abierto
#477 11 comentarios 0 reacciones 0 asignados Ver en GitHub
enhancement :rocket: Feature Request
Lenguaje dominante
JavaScript
Estrellas
8.1k
Forks
358
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

_This is a feature request/Proposal_

As a user of microbundle I want ways to configure which imports are to be considered external.
In order to reduce my bundle size and also to work with non-standard imports (images, fonts, ...) that are not supported by microbundle.

## Status Quo

1. As described in https://github.com/developit/microbundle/issues/283#issuecomment-523879163, there is a (I guess unoffical) way to use regex in the `--exclude` flag, which can be used to have rollup treat specific import statements as external.
2. Presence of the `--exclude` flag triggers if pkg.dependencies are treated as external or not (see [index.js#L387](https://github.com/developit/microbundle/blob/master/src/index.js#L387-L388)) I find that quite confusing and the behaviour is not documented.

## Problem

Given I want to use `--external .*/assets/.*` to work with non-standard imports
And I also want all my dependencies to be excluded
Then I need to add all dependencies to `--external` causing code duplication and manual overhead.

## Proposal

In order to fix the problem and reduce confusion I propose to have it work like this:

### `$ microbundle`

Exclude `dependencies`, `peerDependencies`

### `$ microbundle --external .*/assets/.*`

Exclude `dependencies`, `peerDependencies` and `.*/assets/.*`
And explicitly support regular expressions or globs under `--external`

### `$ microbundle --external .*/assets/.*,angular --include-dependencies`

Exclude `peerDependencies` and `.*/assets/.*`
All normal dependencies ecxept `angular` are included in the bundle

## Non-breaking alternative

I realize that the above proposal is really tied to my personal usecase of (miss-?)using `--external` for non-standard imports.
It would also introduce a potential pretty impactful breaking change (since users of microbundle might ship bundles that lack bundled dependencies).

Alternatively the current behaviour could stay as is, using regex in `--external` will be considered hacky. And we introduce a new, documented way to exclude assets:

### `$ microbundle --external-glob **/*.(jpg|png)`

Exclude `dependencies`, `peerDependencies` and all imports matching `**/*.(jpg|png)`

### `$ microbundle --external angular --external-glob **/*.(jpg|png)`

Exclude `peerDependencies`, `angular`, and all imports matching `**/*.(jpg|png)`

---

Let me know what you think about this. I would be really happy to implement the changes and provide a PR.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.