import 是 ES6 规范语法之一。而 require 属于CommonJS规范的一部分。
目前来说,使用现代浏览器还无法支持 import,一般都会搭配 babel 使用,而 babel 会把 import 转换成 CommonJS 的 require.
但是,我们不能混用 import 和 require。有时候会看下如下代码:
但实际执行顺序并不是你想象或看到的那样。import 具有声明提升效果,会首先执行。所以最好 不要混用。 import 是 ES6 标准,如果可能,首先使用 import, 如果不行,就用 require。
ES6 import
- 具有声明提升效果
- 您可以使用命名导入来选择性地加载所需的部分。这样可以节省内存, 如:
import { render } from react
- 导入可以是异步的
- ES6 标准
require
- 您可以在加载的模块名称不是预定义/静态的情况下进行动态加载,或者只有在真正需要的情况下才有条件地加载模块(取决于某些代码流)
- CommonJS 规范加载是同步的。这意味着如果你有多个require,它们将逐个加载和处理(AMD规范是可以异步的)
- 只是约定的规范
参考:https://twitter.com/dan_abramov/status/883375646357041152