import - ES2015 `import * as` 与普通 `import` 之间的区别

标签 import module coffeescript ecmascript-6

我刚刚通过更改 import * as CodeMirror 修复了一个错误简单明了import CodeMirror .

  • 我复制了this code . (从 TypeScript 移植)
  • import * as CodeMirror一直工作到一个插件因其副作用而被导入:预期的新 fold属性未定义。

  • 问题: (我试图更好地理解发生了什么)
  • 到底是怎么回事?此更改如何修复错误?
  • 谁在添加 default CodeMirror 的属性? (或者更有可能:将模块包装在另一个看起来非常相似的对象中)最有可能的嫌疑人:
  • JavaScript 模块 (ES2015)
  • 通天塔
  • 网页包
  • CoffeeScript
  • 代码镜像
  • 有没有更好的方法来完成我想要实现的目标?


  • 更多详情:

    此代码无法按预期工作:
    import * as CodeMirror from 'codemirror'
    import 'codemirror/addon/fold/indent-fold.js'  # should add `fold` object to `CodeMirror`
    
    console.log typeof CodeMirror          ## 'object'
    console.log typeof CodeMirror.fold     ## 'undefined'
    console.log typeof CodeMirror.default  ## 'function'  
    
    ## Work-around:
    console.log typeof CodeMirror.default.fold  ## 'object'
    

    此代码按预期工作:
    import CodeMirror from 'codemirror'
    import 'codemirror/addon/fold/indent-fold.js'  # should add `fold` object to `CodeMirror`
    
    console.log typeof CodeMirror          ## 'function'
    console.log typeof CodeMirror.fold     ## 'object'
    console.log typeof CodeMirror.default  ## 'undefined'
    

    我已经研究过这些资源,但它们并没有帮助我完全理解发生了什么:
  • JS import reference
  • JS export reference
  • CoffeeScript modules
  • 最佳答案

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

    var test = 'test';
    export default test;
    export function helloWorld () { ... };
    

    当你这样做时:
    import something from 'test-module';
    

    您只导入“some-module”的默认导出。在这种情况下,它是字符串测试。默认导出可以是任何东西、对象、函数等。

    当你这样做时:
    import {helloWorld} from 'test-module';
    

    您正在专门导入名为“helloWorld”的“test-module”成员,而不是默认导出。在这种情况下,它是函数“helloWorld”。

    如果你做了:
    import {something} from 'test-module';
    

    “某事”将是“未定义”,因为没有该名称的导出。
    import * as something from 'test-module';
    

    正在请求一个包含“test-module”的所有命名导出的对象。

    然后你可以访问“test-module”中的任何导出作为something.name。在这种情况下,它们将是 something.defaultsomething.helloWorld .

    关于import - ES2015 `import * as` 与普通 `import` 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40287795/

    相关文章:

    java - 在 Netbeans 或 Eclipse 中引用第 3 方 .jar

    javascript - 如何导入 Plottable.js

    haskell - 找不到模块 `Data.Map' -- 它是隐藏包的成员

    typescript - 是否可以将 Typescript 导入到 ts-node REPL 的运行实例中?

    正则表达式导入失败

    iphone - 这些#import 声明之间有什么区别?

    javascript - Webpack umd 库返回 Object.default

    javascript - Atom IDE 包

    node.js - mock 不 mock 以前需要的模块?

    javascript - 脱咖啡因 : Double Brackets