您的位置:首页 > Web前端

前端模块化

2020-06-29 05:02 761 查看

CommonJS规范

适用于node,浏览器不可以直接使用, 它是同步的(重点)
  • 模块导出

    module.exports = {}
    exports.xxx = 'xxx'
  • 模块导入

    require("")
  • 模块标识符
    分为三种:

    核心模块(Node.js自带的模块)
    
    路径模块(相对或绝对定位开始的模块)
    
    自定义模块(node_modules里的模块)

    三种模块的查找方式:

    核心模块,直接跳过路径分析和文件定位
    
    路径模块,直接得出相对路径就好了
    
    自定义模块,先在当前目录的node_modules里找这个模块,如果没有,它会往上一级目录查找,
    查找上一级的node_modules,依次往上,直到根目录下都没有, 就抛出错误。
  • 文件定位

    在NodeJS中, 省略了扩展名的文件, 会依次补充上 .js .node, .json 来尝试;
    
    如果传入的是一个目录, 那么NodeJS会把它当成一个包来看待, 会采用以下方式确定文件名
    
    第一步, 找出目录下的package.json, 用JSON.parse()解析出main字段
    
    第二步, 如果main字段指定的文件还是省略了扩展, 那么会依次补充.js, .node, .json尝试.
    
    第三步, 如果main字段指定的文件不存在, 或者根本就不存在package.json, 那么会默认加载这个目
    录下的index.js, index.node, index.json文件.
  • CommonJS规范的特点

    所有代码都运行在模块作用域,不会污染全局作用域;
    
    模块是同步加载的,即只有加载完成,才能执行后面的操作;
    
    模块在首次执行后就会缓存,再次加载只返回缓存结果,如果想要再次执行,可清除缓存;
    
    CommonJS输出是值的拷贝(即,require返回的值是被输出的值的拷贝,模块内部的变化也不会影响这个值)。

AMD规范 (异步模块定义)

require.js(AMD规范实现)
  • 定义模块

    define(id?, dependencies?, factory)
    
    id(可选参数):模块名
    
    dependencies(可选参数):一个数组,是我们当前定义的模块要依赖于哪些模块,数组中的每一
    项表示的是要依赖模块的相对路径
    
    factory(必传参数):工函数,定义模块具体内容
  • 模块导入

    模块导入前必须先导入  require.js
    var requirejs = require("requirejs"); //引入requirejs模块
    
    requirejs(['module1'],function(module1) {
    console.log(module1.add())  //add为module1内部的方法
    })

ES6 Modules规范

  • 模块导出

    1、export{}   可以逐个导出任意数量模块,可使用 as 重命名模块
    2、export default   默认导出一个模块
  • 模块导入

    1、import xxx from "modelu1"
    2、import { xxx } from './module1'   解构赋值  xxx必须在module1中同名
    3、import { xxx as yyy } from './module1'   重命名
    4、import * as module from './module1'   整体导入
    5、import module, { xxx } from './module'   默认模块和命名模块一起导入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: