[Proposal] Limited namespace imports

N. Oxer blueshuk2 at gmail.com
Sun Jun 24 04:57:03 UTC 2018


This is best introduced in a possible syntax:

```javascript
import { A, B, C } as d from "module";
```

Essentially, it would allow for some form of importing only some exports
into a namespace. This would not affect the browser or environments like
node, but it would be a boon for module bundlers, such as webpack, rollup,
parcel, etc. It would allow you to specifically define which imports you
want, and the rest to be tree-shaken, and without any quirks of trying to
guess which imports from a

```javascript
import * as d from "module";
```

are used.

It also would prevent the scope from getting cluttered. An example of where
this would be undesirable/annoying is the `@material-ui/icons` package on
npm. It exports many different icons, and an example of using them might be
as such:

```jsx
import {
  Wifi,
  Accessibility,
  Add,
  Save,
  Search
} from "@material-ui/icons";
import SearchBar from "./search";
// use them in some way
export default () => (
  <>
    <SearchBar />
    <Wifi />
    <Accessibility />
    <Add />
    <Save />
    <Search />
  </>
)
```

Alternatively, you could just import them `* as icons`, but then that
imports all of them and inflates the bundle size.

If this proposal were to be implemented, you could do something like

```jsx
import {
  Wifi,
  Accessibility,
  Add,
  Save,
  Search
} as icons from "@material-ui/icons";
import Search from "./search";
// use them in some way
export default () => (
  <>
    <Search />
    <icons.Wifi />
    <icons.Accessibility />
    <icons.Add />
    <icons.Save />
    <icons.Search />
  </>
)
```

and avoid the downsides.

This would also work for a library like lodash. It currently has ~320
utility functions, looking through their documentation, so importing `* as
_` would conflate the bundle immensely. With this proposal, issues like
that would be much less prevalent.

-- 
Noah Oxer
Student, Programmer, and Video Gamer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180623/03fd6c8d/attachment.html>


More information about the es-discuss mailing list