ES6 有特殊的语法用于使用 "default" 导入,而目前在使用导入的 ES6 代码时,CLJS 没有对应的功能。
`
import * as name from "module-name";
(:require ["module-name" :as name])
import { export } from "module-name";
(:require ["module-name" :refer (export)])
import { export as alias } from "module-name";
(:require ["module-name" :refer (export) :rename {export alias}])
import defaultExport from "module-name";
import defaultExport, { export [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
;; 无法轻松访问 defaultExport
`
我建议将一个 {{:default}} 添加到 {{ns :require}}。
(:require ["module-name" :as mod :default foo])
这使得从 CLJS 使用重写的 ES6 代码变得更加方便。如果 "module-name" 有默认导出,您目前不得不在每个地方写出 {{mod/default}},因为没有简单的方式来别名默认名称。
`
(:require ["material-ui/RaisedButton" :as RaisedButton])
;; :as 是错误的,用户现在必须使用
RaisedButton/default
(:require ["material-ui/RaisedButton" :default RaisedButton])
;; 这样可以直接使用
RaisedButton
`
在内部,Closure 编译器(以及由 babel 重写的 ES6 代码)会将默认导出重写到 {{.default}} 属性,所以 {{:default}} 实际上只是一个方便的访问方式。
已经实现的较长的版本是
(:require ["material-ui/RaisedButton" :refer (default) :rename {default RaisedButton}])
当 ES6 更加普及后,我们应该有一个方便的方式来正确引用 "default" 导出。
(link: 1) https://mdn.org.cn/en-US/docs/Web/JavaScript/Reference/Statements/import