• mvc-6依赖管理


    CommonJS

    • CommonJS规范,主要解决命名空间管理模块和用一套标准的编程模式来加载模块;
    • 很快成为了JavaScript模块写法的事实标准;
    • 它包含IO接口,底层的套接字流,以及单元测试等标准;

    模块的声明

    • 模块被分隔为不同文件,通过给exports对象添加内容来对外暴露模块的变量的方法,exports变量是在解析器中定义好的;
    • 要想使用在模块中定义的函数,只需require()这个文件,同时将运行结果保存在本地变量中;
    • 模块就是命名空间,目前CommonJS规范在js服务器端运用,如node.js
    //math.js
    exports.per = function(value, total) {
      return ( (value / total) * 100 );
    }
    //application.js
    var Maths = require("/maths");
    assertEqual(Math.per(50, 100), 50);
    

    模块和浏览器

    • 在浏览器中不容易实现CommonJS,因为它需要阻塞UI并适时地执行刚加载地script脚本(在客户端则要避免这种情况出现);
    • CommonJS团队提出一个规范:模块转换格式,将CommonJS地模块包装在一个回调函数中,以便更好地处理客户端地异步加载;
    //math.js
    require.define("maths", function(require, exports) {
      exports.per = function(value, total) {
        return ((value / total) * 100);
      };
    });
    //application.js
    require.define("application", function() {
      var per = require("./maths").per;
     assertEqual(per(500, 100), 50);
    }, ["./maths"]); //给出它地依赖
    

    模块加载器

    RequireJS

    • 对模块加载地看法略不同,它遵循“异步模块定义”(AMD)格式,主要不同在于AMD的API是即时计算依赖关系,而不是延迟计算;
    • 具体可以去了解AMD, CMD;

    例子

    *require-example/index.html

    data-main属性快捷引入初始化脚本

    <!DOCTYPE html>
    <html>
    <head>
    	<title></title>
    	<script data-main="app" src="lib/require.js"></script>
    </head>
    <body>
      <h1>Hello World</h1>
    </body>
    </html>
    

    *require-example/app.js

    requirejs.config, baseUrl定义第三方库的路径, paths定义第三方库引入到的文件夹;requirejs(['app/main']), 定义了引入文件夹中最先执行的脚本;

    requirejs.config({
        baseUrl: 'lib',
        paths: {
            app: '../app'
        }
    });
    requirejs(['app/main'], function(){});
    
    • require-example/lib/print.js

    引入的第三方库中也可以自己定义通用的脚本

    define(function() {
      return function print(msg) {
      	console.log(msg);
      }
    })
    
    • require-example/app/message.js

    定义一个普通脚本

    define(function () {
        return {
            getHello: function () {
                return 'Hello World';
            }
        };
    });
    
    • require-example/app/main.js

    主程序执行的脚本, 注意引入第三方库脚本和一般脚本的区别

    define(function (require) {
    
        var messages = require('./messages');
    
        var print = require('print');
    
        print(messages.getHello());
    });
    
    

    包装模块

    手动将模块合并压缩打包

    • 随着应用体积越来越大,考虑到可维护性,需要将模块很细地颗粒化;新的文件会拆分成很多个;
    • 而考虑到性能,不得不将文件合并载入;
    • 两者是一对矛盾,所以模块依赖管理既要考虑到代码结构地整洁、清晰,又要兼顾性能地最优化;

    LAB.js

    简单地脚本加载器

    <script>
      $LAB
      .script(''/js/json2.js')
      .script("/js/jquery.js").wait()
      .script("/js/juqery-ui.js")
      .script("/js/vaport.js")
    </script>
    
    • 所有地脚本加载都是并行的;
    • LABjs会确保jquery.js在juqery-ui.js和vaport.js之前加载;
  • 相关阅读:
    《Attack ML Models
    对抗攻击基础知识(完结)
    解决github release下载慢/下载失败的问题
    《Effective Python:编写高质量Python代码的59个有效方法》读书笔记(完结)
    MacBook常用软件
    解决python3读写中文txt时UnicodeDecodeError : 'ascii' codec can't decode byte 0xc4 in position 5595: ordinal not in range(128) on line 0的问题
    Shell中的函数库
    Mysql登录报1045错误
    宝塔面板关键目录解析
    CentOS7 yum报 Cannot retrieve metalink for repository: epel/x86_64. Please verify its path解决方法
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4328298.html
Copyright © 2020-2023  润新知