跳至主要內容

我们真的不需要export default

Cap原创大约 1 分钟emotibot

原文链接https://zhuanlan.zhihu.com/p/40733281open in new window

先说结论一:

image.png
image.png

错误的写法

// lib.js
export default { 
 a: 1,
 b: 2
}
// main.js
import { a,b } from './lib';
console.log('a:',a);
console.log('b:',b);

-Q:为什么禁止对复合对象字面量的导出操作?(如上)
-A:babel5会将错误的写法输出成正确的值(babel5的bug),其实按照正确的esm语法,使输出为undefined的。
-A:在esm和cjs互相转换的时候加大复杂性。如下图:
image.png

正确使用ESM

导出

// lib.js
export function getName(){}
export const a = 1
export default 'name'

导入

import * as all from './lib.js'
import lib from './lib.js'
import {a} from './lib.js'

CJS的导入导出

导出

module.export = {}
export.name = 'chenjian'

导入


const name = require('./lib.js');

原文链接https://zhuanlan.zhihu.com/p/97335917open in new window

再说结论二

彻底禁用export default

我个人的观点

esm一把梭,兼容问题是暂时的,就像微软不支持ie一样。该进步还是要进步。