in packages/babel-plugin-transform-loadable-component/src/index.js [18:58]
ImportDeclaration(p) {
const specifiers = p.get('specifiers')
const source = p.get('source')
if (
// 如果没有 specifier, 如 import 'module' 则直接略过该次遍历
!specifiers ||
!specifiers.length ||
// 如果 source 非法则直接略过该次遍历
!source ||
!source.isStringLiteral()
) {
return
}
// 目前只解析 default import 标识, 如果未发现 default import 特征, 则直接略过该次遍历
const firstSpecifier = specifiers[0]
if (!firstSpecifier || !firstSpecifier.isImportDefaultSpecifier()) {
return
}
// 获得当前的 default import 标识
const defaultImportIdentifier = firstSpecifier.get('local').node.name
const importSource = source.node.value
const importDeclarationMap = {
source: importSource,
path: p,
}
if (importSource === defaultReactLoadableSource) {
// 如果找到了 react-loadable 的 import 引用, 则记录下来避免误删
// 并在后续的转换过程直接使用该 identifier 作为引用值
this.reactLoadableImport.set('path', p)
this.reactLoadableImport.set('identifier', defaultImportIdentifier)
} else {
this.defaultImportsMap.set(
defaultImportIdentifier,
importDeclarationMap
)
}
},