1.模块化

作者: RZsnail | 来源:发表于2018-04-05 18:03 被阅读0次

模块化发展:

1.命名空间

库名.类别名.方法名: 

var NameSpace = {};

NameSpace.type = NameSpace.type || {};

NameSpace.type.method = function () {};

--------------------------------------------------------------

代码示例

var MYAPP = MYAPP || {};

        MYAPP.namespace = function (ns_string) {

            var parts = ns_string.split('.'),

                parent = MYAPP,

                i;

            // strip redundant leading global

            if (parts[0] === "MYAPP") {

                parts = parts.slice(1);

            }

            for (i = 0; i < parts.length; i += 1) {

                // create a property if it doesn't exist

                if (typeof parent[parts[i]] === "undefined") {

                    parent[parts[i]] = {};

                }

                parent = parent[parts[i]];

            }

            return parent;

        };

缺点: 

如果命名空间被覆盖很难检测到;

必须要记住完整路径名,比较麻烦;

2.commonJS

Modules/1.1.1

    一个文件为一个模块

通过module.exports暴露模块接口

通过require 引入模块

同步执行

http://wiki.commonjs.org/wiki/Modules/1.1.1

代码示例:

var EventEmitter = require('events').EventEmitter;

var mixin = require('merge-descripotors');

var proto = require('./application');

var Route = require('./router/router');

var req = require('./request');

var res = require('./response');

/**

* Expose 'carateApplication()'

*/

exports = module.exports = createApplication;

3.AMD  (Asynchronous Module Definition)

特点:前置执行

代码示例:

define([

    'alpha',      //'require',

    ['require', 'exports', 'beta']      //'dependency'

], function(require, exports, beta) {    // require, factory 模块输出

    'use strict';

    exports.verb = function () {

    return beta.verb();

    // or:

    return require('beta').verb();

}

});


4.CMD (Common Module Definition)

一个文件为一个模块;

使用define来定义一个模块;

使用require来加载一个模块;

尽可能懒执行。

代表作: SeaJS;

https://github.com/cmd.js/specification/blob/master/draft/module.md

代码示例: 

//所有模块通过 define 来定义

define(function (require, exports, module) {

    //通过 require 引入依赖

    var $ = require('jquery');

    var Spinning = require('./spinning');

    //通过 exports 对外提供接口

    exports.doSomething = ...

    //或者通过 module.exports 提供整个接口

    module.exports = ...

})

5.UMD (Universal Modele Definition)

通用解决方案

三个步骤:

    判断是否支持AMD;

    判断是否支持CommonJS;

    如果都不支持,则定义为全局变量。

代码示例:

6. ES 6 module

一个文件为一个模块

export/ import

代码示例:

// Default exports and named exports

import theDefault, { named1, named2 } from 'src/mylib';

import theDefault from 'src/mylib';

import { named1, named2 } from 'src/mylib';

//Renaming: import named1 as myNamed1

import { named1 as myNamed1, named2 } from 'src/mylib';

//Importing the module as an object

// (with one property per named export)

import * as mylib from 'src/mylib';

//Only load the module, don't import anything

import 'src/mylib';

webpack支持:

AMD(requireJS)

ES Modules(recommend)

CommonJS

相关文章

  • 1.模块化

    模块化发展: 1.命名空间 库名.类别名.方法名: var NameSpace = {}; NameSpace.t...

  • 1.模块化

    一、概述 模块就是在程序集中定义一个实现abpmodule的类。从而可以在任意是ABP框架项目中实现重用性(引用该...

  • es6总结

    1.模块化 /*关于模块化的了解 非模块化有以下缺点: 1.命名冲突 2.文件依赖 前端流行的模块化:AMD re...

  • webpack基础笔记

    webpack基础 1.前端工程化 实际的前端开发: 模块化:(js的模块化,css的模块化,资源的模块化) 组件...

  • Vue前端工程化

    1.模块化的分类 A.浏览器端的模块化 B.服务器端的模块化 C.ES6模块化 小结:推荐使用ES6模块化,因为A...

  • 前端工程化

    1.模块化的分类 A.浏览器端的模块化 B.服务器端的模块化 C.ES6模块化 小结:推荐使用ES6模块化,因为A...

  • ES6模块化和webpack打包(模块化部分)

    ✍目录总览: 模块化相关规范 1. 模块化概述 传统开发模式的主要问题 ① 命名冲突 ② 文件依赖 通过模块化解决...

  • CMD、AMD、CommonJS 规范

    问答 1.为什么要使用模块化? 要使用模块化,我们要知道什么是模块化?首先一个模块是为了实现特定功能的文件,模块化...

  • Android 模块化开发

    一、模块化浅谈 1. Android 模块化开发介绍; 模块化开发思路就是:单独开发每个模块,用集成的方式把他们组...

  • vue工程化webpack

    1. 模块化的分类 浏览器端的模块化AMD(Asynchronous Module Definition,异步模块...

网友评论

    本文标题:1.模块化

    本文链接:https://www.haomeiwen.com/subject/rpddhftx.html