自学前端日记

第四篇: 模块化开发

最早的实现方式

把不同功能的模块抽离出来写入单独的js文件,但是当项目更为复杂的时候,html可能会引入很多个js文件,而这个时候就会出现命名冲突污染作用域等一系列问题,这个时候现代模块化的概念及实现方法应运而生

早期简单的自定义模块化实现(借用了闭包的实现)

function salary(){

    let salary = '';
    
    function setSalary(a){
        salary +=a;

        //改变salary的方法
    }

    function getSalary(){

        return salary;
        //获取salary的方法
    }

    return {

        setSalary:setSalary,
        getSalary:getSalary
        
    }
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<!-- 引入js代码-->
<script type="text/javascript" src="./salray.js"></script>

<script>

  let {getSalary,setSalary} = salary();
    
</script>

现代模块化开发 规范

目的:降低复杂度,提高解耦性

           避免命名冲突

           更好的分离,按需加载代码

           高复用性,高维护性

CommonJS规范

(主要用于node端) 也可以用于浏览器端(借助于browserify编译)能够被浏览器识别

全局安装browserify (拥有指令集的库)

npm i browserify -g

编译汇总模块文件  browserify ./app.js -o ./build.js

暴露语法:module.exports = value;  exports.xxx = value; 本质是暴露 module.exports对象

const data =[1,2,3];

function fn1(){
    console.log(data[0]);
}


function fn2(){
    console.log(data[1]);
}

module.exports = {
    fn1,
    fn2
}
const obj = require('./01.js');//引入自定义模块

console.log(obj);

const {fn1,fn2} = obj;

fn1(); // 1
fn2(); // 2

引入语法:   const  xxx = require("./a.js"); a.ja  文件路径

 ES6规范用于浏览器端(要借助Babel和Browserify依次编译代码才能在浏览器端运行)

npm install browserify  babel-cli -g

cli  "commond line interface" 命令行接口工具

局部安装 babel-preset-es2015

配置 .babelrc 文件

{
    "presets":["es2015"]
}

基本语法:

暴露模块

        export 暴露内容   分别暴露

        export {obj1,obj2...}  统一暴露

        export default {暴露匿名内容}  默认暴露

  module1.js  分别暴露

export let data1 = "哈哈"; // 分别暴露

module2.js   统一暴露

function sum(a,b){
    console.log(a+b);
}


function sub(a,b){
    console.log(a-b);
}


export {sum,sub};

module3.js  默认暴露

export default (a,b)=>{
    console.log(a+b);
}

app.js 引入模块 

// 1. 通用的方式引入模块

    import * as obj1 from "./module1";//引入的是对象里面包含 暴露的属性

    import * as obj2 from "./module2";//引入的是对象里面包含 暴露的属性

    import * as obj3 from "./module3";//引入的是对象里面包含 暴露的属性

    //使用里面的属性
    let {data1} = obj1;
    let {sum,sub} = obj2;
    let user = obj3.default;


// 2. 使用解构赋值的形式引入模块    
    import { data1 } from "./module1";
    import { sum,sub } from "./module2";
    import {default as user} from "./module3"; 


    console.log(data1);

    console.log(sum(1,2));

    console.log(sub(28,2));

    console.log(user);

  将ES6 => ES5

终端进入到ES6文件夹 输入  babel ./ -d ../build  (babel只认识.js文件)生成一个build文件夹

再将build文件下的app.js文件  使用 browserify ./app.js -o ./lastApp.js  编译运行在浏览器端

 然后在html页面引入./build/lastApp.js 文件即可 

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值