CommonJS导入vs ES6导入

Jon*_*nny 8 import commonjs ecmascript-6 reactjs

以下是使用非默认导出的两个示例.第一个使用commonjs语法,第二个使用es6.为什么第一个例子有效,但不是第二个?

// commonjs --- works!
var ReactRouter = require('react-router')
var Link = ReactRouter.Link


// es6 --- doesn't work!
import ReactRouter from 'react-router'
var Link = ReactRouter.Link
Run Code Online (Sandbox Code Playgroud)

我明白我可以使用import { Link } from 'react-router',但我只是试图了解每个导入的不同之处.

Cod*_*gue 9

import ReactRouter仅导入默认导出.它不会导入您在ES6代码中尝试实现的命名导出对象.如果在模块中没有默认的出口,这ReactRouter将是undefined.

如上所述,import { Link } from 'react-router'是导入单个命名导出的专用语法.

如果要将所有命名导出导入到对象中,可以使用以下import..as语法:

import * as ReactRouter from 'react-router';
var Link = ReactRouter.Link
Run Code Online (Sandbox Code Playgroud)

MDN有一个超级有用的列表,列出了所有不同类型的导入及其工作方式.