翻译github整理笔记。模块(能力一般水平有限)。
ps:在ES6模块系统中,js自动将模式变为严格模式
export
- 在CommonJS,你可以利用将属性赋给 module.exports 来实现将属性输出。可以看到,在下面的代码快中,你可以输出对象,数组,函数,变量中的任何一个
module.exports = 1
module.exports = NaN
module.exports = 'foo'
module.exports = { foo: 'bar' }
module.exports = ['foo', 'bar']
module.exports = function foo () {}
ps: 任何一个在module中定义的变量不会提供给其他模块,除非被特定指出输出,作为一个模块的api
- 你可以吧CommonJS中的 module.exports = 简写成 export default
export default 1
export default NaN
export default 'foo'
export default { foo: 'bar' }
export default ['foo', 'bar']
export default function foo () {}
- 不同于CommonJS export 表达式必须写在最高作用域内,即使当加载此模块时立即调用他们
function foo () {
export default 'bar' // SyntaxError
}
foo()
- 命名输出项
像CommonJS一样,为了避免给module.exports分配对象,你可以给export定义绑定
下面的代码块展示了ES6模块API的定义.
export var foo = 'bar'
export var baz = 'ponyfoo'
- 绑定,绑定,不是数值和引用。
下面是文档对于此特性的定义,
That means that a foo variable you export would be bound into the foo variable on the module, and its value would be subject to changes made to foo. I’d advise against changing the public interface of a module after it has initially loaded, though.
也就是说 export中输出的属性,将会和模块export属性绑定,当输出的属性改变时,会影响到模块的值跟着改变.文档作者建议,当加载某模块时,尽量不要修改模块公共接口,以免影响其他同时加载此模块的代码段。
export var foo = 'bar'
setTimeout(() => foo = 'baz', 500)
- 输出列表
var foo = 'ponyfoo'
var bar = 'baz'
export { foo, bar }
可以起一个别名.
export foo as ponyfoo
也可以在输出列表中 as default
export { foo as default,bar}
import
不多说了上代码
import {default, map} from 'lodash'
import {default as _, map} from 'lodash'
import _, {map} from 'lodash'
import * as _ from 'lodash' //所有