developit / developit/microbundle

Officially support more elaborate externals

Aberta
#477 11 comentários 0 reações 0 responsáveis Ver no GitHub
enhancement :rocket: Feature Request
Linguagem predominante
JavaScript
Estrelas
8.1k
Forks
358
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

_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.

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.