# 模块化开发与规范化标准

node commonjs 浏览器 ES modules

# ES-module 基本特性

  • ESM 自动采用严格模式,忽略'use strict'
  • 每个ESM模块都是单独的私有作用域
  • ESM是通过CORS去请求外部JS模块的
  • ESM的script标签会延迟执行脚本

# ES-module 导入

导出 export 导入 import

  export { 
    name as default, // 重命名,导入的时候需导入重命名之后的变量名
    foo as fooo, 
    Person
    }
  // 导出的时候 {} 是固定的用法,并不是导出一个对象
  export default name
  import {default as name} from ''
  import name from ''
  // from后必须是完整路径名,不能简写 import 项目路径 ./也不能省略  如果省略它会以为这是第三方的的模块  
  //  / 根目录文件下去找文件领
  // import {} from './module.js' 是指执行,不引用
  // import './mudile.js'
  // import * as mod from './module.js' // 模块内人成员很多时,一次性全部导入,并用mod.xx 方式与引用
  //  import('./modules.js')返回一个promise
  // export {foo, bar} from './module.js' 直接导出导入的成员 
  import('./module.js').then(function(module){
    console.log(module)
  })
  import {name, age, defult as rename} from './module.js'
  import rename, {name, age} from './module.js'

导入注意事项;

  • rom后必须是完整路径名,不能简写 import 项目路径 ./也不能省略 如果省略它会以为这是第三方的的模块
  • import './module.js' 是指执行,不引用
  • import * as mod from './module.js' // 模块内人成员很多时,一次性全部导入,并用mod.xx 方式与引用
  • 导入路径是一个变量时,不能用import,需动态导入

# ES Module in node

处于过度状态

  • ES Modules中可以导入CommonJS 模块
  • CommonJs 中不能导入ES Modules模块
  • CommonJS 始终只会导出一个默认成员
  • 注意import不是解构导出对象

node --experimental-modules [file]