Import ES2015“导入*为”与“普通”导入之间的差异`

Import ES2015“导入*为”与“普通”导入之间的差异`,import,module,coffeescript,ecmascript-6,Import,Module,Coffeescript,Ecmascript 6,我刚刚通过将import*作为CodeMirror更改为纯import CodeMirror修复了一个bug 我抄了。(从TypeScript移植) import*作为CodeMirror一直工作,直到为其副作用导入了加载项:预期的新fold属性未定义 问题:(我试图更好地理解发生了什么) 发生了什么事?此更改是如何修复此错误的 谁在向CodeMirror添加default属性?(或者更可能:将模块包装在另一个看起来非常相似的对象中)最有可能怀疑: JavaScript模块(ES2015

我刚刚通过将
import*作为CodeMirror
更改为纯
import CodeMirror
修复了一个bug

  • 我抄了。(从TypeScript移植)
  • import*作为CodeMirror
    一直工作,直到为其副作用导入了加载项:预期的新
    fold
    属性未定义
问题:(我试图更好地理解发生了什么)

  • 发生了什么事?此更改是如何修复此错误的
  • 谁在向CodeMirror添加
    default
    属性?(或者更可能:将模块包装在另一个看起来非常相似的对象中)最有可能怀疑:
    • JavaScript模块(ES2015)
    • 巴别塔
    • 网页包
    • 咖啡脚本
    • 编码镜
  • 有没有更好的方法来实现我想要实现的目标

更多详细信息:

此代码未按预期工作:

此代码按预期工作:


我已经研究了这些资源,但它们并没有帮助我完全理解发生了什么:


import*作为“CodeMirror”中的CodeMirror
将所有命名导出和名称空间导入名为
CodeMirror
的对象


从“CodeMirror”导入CodeMirror
导入默认导出。

假设您有一个名为“test module”的非常简单的模块,其中包含:

var test = 'test';
export default test;
export function helloWorld () { ... };
当您这样做时:

import something from 'test-module';
import {helloWorld} from 'test-module';
您只导入“某些模块”的默认导出。在本例中,它是字符串测试。默认导出可以是任何内容、对象、函数等

当您这样做时:

import something from 'test-module';
import {helloWorld} from 'test-module';
您正在专门导入名为“helloWorld”的“测试模块”的成员,而不是默认导出。在本例中,它是函数“helloWorld”

如果你做了:

import {something} from 'test-module';
“某物”将是“未定义的”,因为没有使用该名称的导出

import * as something from 'test-module';
正在请求一个包含“测试模块”的所有命名导出的对象


然后,您可以以something.name的形式访问“test module”中的任何导出。在这种情况下,它们将是
something.default
something.helloWorld

存在
CodeMirror.default
属性是否正常,因为
import*作为“CodeMirror”的CodeMirror
?我不认为
codemirr
显式地命名了一个名为“default”的导出,它们可能有一个默认导出标记为
export default
,我认为当您进行通配符导入时,它在
default
键下出现。可能应该更改
某个东西。default
某个东西['default']
(就像所有关键字属性一样)因为不是所有的Transpiler都会为您执行此操作,而且在较旧的浏览器上会出错。