2018-11-07  本文已影响0人  东方少年_3fdf

前端模块化

对于模块化的理解:

什么是模块?

   将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起

   块的内部数据/实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信

一个模块的组成:

   数据 --->内部的属性

   操作数据的行为 ---> 内部的函数

模块化:

    编码时是按照模块一个一个编码的, 整个项目就是一个模块化的项目

先来说下AMD~~~

1. 下载require.js, 并引入

     官网: http://www.requirejs.cn/

     github : https://github.com/requirejs/requirejs

     将require.js导入项目: js/libs/requirejs

2. 创建项目结构

3. 定义require.js的模块代码

dataService.js

alerter.js

4. 配置应用主(入口) js: main.js

5. 配置主页: index.html

6. 打开谷歌浏览器进行测试

接下来说下CMD~~

1. 下载sea.js, 并引入

    官网: http://seajs.org/

    github : https://github.com/seajs/seajs

    将sea.js导入项目: js/libs/sea.js

2. 创建项目结构

3. 定义sea.js的模块代码

module1.js

module2.js

module3.js

module4.js

5. main.js : 主(入口)模块

6. 配置 index.html

7. 打开谷歌浏览器进行测试

最后说下CommonJS~

1. 创建项目结构

2. 定义package.json文件

  {

    "name" : "es6-babel-browserify",

    "version" : "1.0.0"

  }

3. 定义.babelrc文件

{

    "presets": ["es2015"]

 }

4. 安装babel

    npm install babel-core babel-loader babel-preset-es2015 --save

5. 编码

module1.js

module2.js

module3.js

app.js

6. 配置 index.html

7. 打开谷歌浏览器进行测试

总结下...

AMD : 浏览器端

  require.js

  基本语法

    定义暴露模块: define([依赖模块名], function(){return 模块对象})

    引入模块: require(['模块1', '模块2', '模块3'], function(m1, m2){//使用模块对象})

    配置:

      require.config({

        //基本路径

        baseUrl : 'js/',

        //标识名称与路径的映射

        paths : {

          '模块1' : 'modules/模块1',

          '模块2' : 'modules/模块2',

          'angular' : 'libs/angular',

          'angular-messages' : 'libs/angular-messages'

        },

        //非AMD的模块

        shim : {

          'angular' : {

              exports : 'angular'

          },

          'angular-messages' : {

              exports : 'angular-messages',

              deps : ['angular']

          }

        }

      })

CMD : 浏览器端

  sea.js

  基本语法

    定义暴露模块:

      define(function(require, module, exports){

        通过require引入依赖模块

        通过module/exports来暴露模块

        exports.xxx = value

      })

    使用模块seajs.use(['模块1', '模块2'])

CommonJS

   Node.js : 服务器端

   Browserify : 浏览器端    也称为js的打包工具

   基本语法:

     定义暴露模块 : exports

      exports.xxx = value

      module.exports = value

    引入模块 : require

      var module = require('模块名/模块相对路径')

   引入模块发生在什么时候?

     Node : 运行时, 动态同步引入

     Browserify : 在运行前对模块进行编译/转译/打包的处理(已经将依赖的模块包含进来了),运行的是打包生成的js, 运行时不存在需要再从远程引入依赖模块

上一篇 下一篇

猜你喜欢

热点阅读