前端模块化两种规范

前端模块化,是指js编写的的模块化规范。

本文参考:大神偶像阮一峰老师的文章

为什么要模块化?

      1.一个文件需要很多js文件做依赖的时候,这些js文件之间的关系很容易让人眩晕,模块化后可以现用现引;

      2. 模块后可以防止模块内的变量和模块外的变量相互污染;

模块化发展经历了哪些阶段?链接

模块化分类

       js是前、后端都可以用的语言,针对前后端不同的加载速度,模块化规范也分为两种:后端的CommonJs 和前端的AMD规范

       CommonJs 的应用者就是nodejs(webpack和它什么关系??????)

                CommonJs 规范是同步加载的,正是因为这一点,CommonJs 不适合作为前端规范来用,

               (因为前端由于网速限制,每个文件都加载模块的话会产生大量的网络请求,只适合作为服务器的规范来使用)

                 nodejs每个文件都是一个模块;

                 通过module.export /export暴露接口来输出,通过require来引入(这些必须在学习完nodejs之后才能理解);

        AMD规范的应用者是requir.js;

                  require.js通过define来定义模块,通过require来加载模块,加载完模块后执行后面的回调函数,回调函数的参数就是加载的模块

                  具体操作(在html文件里引入<script   src='./js/require.js'    data-main ='./js/main.js'></script>)

                      main.js里配置(通常都有单独的配置文件)和引用

//main.js
require.config({
baseUrl: ' ./tool' paths: {
'jquery': 'jquery',//如果没有baseUrl,写:'./too/query' 'math': 'math' } }) //关于config属性的参数,是一个对象,对象的属性常用的有pahts(复数),baseUrl, require(['jquery', 'math'], function ($, math) {//不配置的话会默认去找父级文件下的jQuery文件 console.log($()); math.add(1, 2) })

                      定义模块:两种方法,函数式和对象式,通常使用函数式,也可以引用依赖的模块

                       

 1 //定义模块有两种形式:函数式和对象式
 2 define(function() {  //函数式
 3     function add(a,b){
 4         console.log(a + b)
 5         return a + b;
 6     }
 7     return {
 8         add: add
 9     }
10 });
11 // define([
12 //     'require',
13 //     'dependency'
14 // ], function(require, factory) {
15 //     'use strict';
16     
17 // });
18 // define({   //对象式
19 //     add:function(a,b){
20 //         console.log(a + b)
21 //         return a + b;
22 //     }
23 // });

              require.js的应用者是谁,和webpack有什么关系,为什么webpack的配置文件和CommonsJs的配置文件格式那么像???????

            

原文地址:https://www.cnblogs.com/dangdanghepingping/p/10172017.html