developit / developit/microbundle

Officially support more elaborate externals

Đang mở
#477 11 bình luận 0 reaction 0 người được giao Xem trên GitHub
enhancement :rocket: Feature Request
Ngôn ngữ chính
JavaScript
Star
8.1k
Fork
358
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.