export const name = 'value'
import { name } from '...'
// Default Export | Default Import
export default 'value'
import anyName from '...'
// Rename Export | NameImport
export { name as newName }
import { newName } from '...'
// Name + Default | Import All
export const name = 'value'
export default 'value'
import * as anyName from '...'
// Export List + Rename | Import List + Rename
export {
name1,
name2 as newName2
}
import {
name1 as newName1,
newName2
} from '...'
Now let's look at each of them and see how they work đ¤
#a. Name
The key here is having a name. Hence a "named" export lol đ
export const name = 'value';
import { name } from 'some-path/file';
console.log(name); // 'value'
❌ What did I say, no name, no export!
export 'value'
import { } // đ see I don't even know what to put here...give me a name!
#b. Default
With a default export, you don't need any name. Because you can name it whatever you want đ
export default 'value'
import anyName from 'some-path/file';
console.log(anyName); // 'value'
❌ No Variable Declaration with Default
export default const name = 'value'; // don't try to give me a name!
#Mixing Default + Name
You can absolutely combine default and name export in one file đ¤
export const name = 'value';
export default 'value'
import anyName, { name } from 'some-path/file';
#c. Export List
The third style is an Export List.
const name1 = 'value1';
const name2 = 'value2';
export {
name1,
name2
}
import {
name1,
name2
} from 'some-path/file'
console.log(
name1, // 'value1'
name2, // 'value2'
)
One important thing to note is that these lists are NOT objects. Yes, I know it looks like it. But it isn't. I made this confusion when I first learned modules. It's not an object, it's an export list!
// ❌ Export list ≠ Object
export {
name: 'name'
}
#Renaming Export
Not happy with the export name. No problem, you can rename it using the as
keyword.
const name = 'value'
export {
name as newName
}
import { newName } from 'some-path/file'
console.log(newName); // 'value'
// Original name is not accessible
console.log(name); // ❌ undefined
❌ Can not combine inline export with export list
export const name = 'value';
// You're already exporting name ☝️, don't export me again
export {
name
}
#Renaming Import
The same rule applies to import. We can rename it using the as
keyword.
const name1 = 'value1';
const name2 = 'value2';
export {
name1,
name2 as newName2
}
import {
name1 as newName1,
newName2
} from '...'
console.log(newName1); // 'value1'
console.log(newName2); // 'value2'
❌
name1; // undefined
name2; // undefined
#Import All
export const name = 'value';
export default 'defaultValue';
import * as anyName from 'some-path/file';
console.log(anyName.name); // 'value'
console.log(anyName.default); // 'defaultValue
Examples
Using named exports
In a module
my-module.js
, we could include the following code:// module "my-module.js" function cube(x) { return x * x * x; } const foo = Math.PI + Math.SQRT2; var graph = { options: { color:'white', thickness:'2px' }, draw: function() { console.log('From graph draw function'); } } export { cube, foo, graph };
Then in the top-level module included in your HTML page, we could have:
import { cube, foo, graph } from './my-module.js'; graph.options = { color:'blue', thickness:'3px' }; graph.draw(); console.log(cube(3)); // 27 console.log(foo); // 4.555806215962888
No comments:
Post a Comment