• 前端框架Vue自学之前端模块化(补充)


    目标:了解一下前端模块化的知识

    内容:用于记录一些心得。(前端模块化)

    正文:

    一、JavaScript原始功能

      在网页开发的早期,JS作为一种脚本语言,做一些简单的表单验证或者动画实现,那个时候代码还是很少的,一般是直接写在<script>标签中。

    二、存在问题

      随着AJAX异步请求的出现,慢慢形成了前后端的分离。客户端需要完成的事情越来越多,代码量也是与日俱增。为了应对代码量的剧增,我们通常会将代码组织在多个JS文件中,进行维护。但是这种维护方式,依然不能避免一些灾难性的问题。比如说全局变量同名问题(因为一个大的项目是多人完成的,需要导入每个人写的代码汇总);另外,这种代码的编写方式对JS文件的依赖顺序几乎是强制性的,也无法避免全局变量同名问题。

    三、模块化雏形(早期的模块化)

      之前解决上述的问题的方法有匿名函数,类似于(function () {} )()的格式。但是代码的复用性又不得不降低了,甚至不可复用。所以在ES5中可以通过把需要可复用的代码添加到一个对象,通过匿名函数的返回这个对象(使用模块作为出口,暴露到外面的属性和方法,不需要暴露的直接定义),并用某个变量去接收这个返回对象,这个变量就是模块。然后在别的文件导入这个模块,就可以使用这个模块的代码了。

      幸运的是,前端模块化开发以及有了很多既有的规范,以及对应的实现方案。

      常见的模块化规范有:CommonJS(通过node实现),AMD,CMD,也有ES6的Modules。(tips:模块化包括导出和导入)

    四、CommonJS(webpack也使用这个,因为也是依赖node环境)

      CommonJS的导出:(注意是要在node环境下,要用node底层解析module.exports)

    1 module.exports = {
    2     flag: ture,
    3     test(a, b) {
    4         return a + b
    5     },
    6     demo(a, b) {
    7         return a - b
    8     }
    9 }

      CommonJS的导入:(moduleA是刚刚导出文件的文件名(可加路径))

    1 //CommonJS模块
    2 let {test, demo, flag} = require('moduleA')
    3 //等同于
    4 let _mA = require('moduleA');
    5 let test = _mA.test;
    6 let demo = _mA.demo;
    7 let flag = _mA.flag;

    五、ES6的Modules

      export(导出)/import(导入)

      当我们在引入别人JS文件时,用<script src="xxx.js'>,当我们在script标签下使用type=‘module’时,这意味着我们是按照模块化使用这个xxx.js文件。相当于这个文件是在一个模块内,有着自己独立的作用域。

      export(导出了模块对外提供的接口)。可以导出变量,函数,类(ES6提供了class类)。或者是导出一个默认的东西,让导入者自己来命名(export default),这样的好处就是导入者可以不必知道要导入的模块代码的名字。

     1 //info.js
     2 export let name = 'coco'
     3 export let age = 18
     4 //另一种写法
     5 // let name = 'coco'
     6 // let age = 18 
     7 // export {name, age}
     8 export function logInfo (value){
     9     return console.log(value)
    10 } 
    11 export class Person {
    12     constructor(name, age){
    13         this.name = name;
    14         this.age = age;
    15     }
    16     run(){
    17         console.log('I am a class')
    18     }
    19 }
    20 // export logInfo, Person}
    21 //默认导出只能有一个
    22 const address = 'abc';
    23 export default address

      import(导入,加载对应模块)。导入之后就可以对应使用了。通过*可以导入模块中所有的export变量,但是通常情况下我们需要个*用as起一个别名,方便后续使用。

    1 //func.js
    2 import {name, age} from 'info.js'
    3 import{logInfo, Person} from 'info.js'
    4 //默认导出adress并命名为add
    5 import add from 'info.js'
    6 //import * as info from './info'
    7 //console.log(info.name, info.age)

      

  • 相关阅读:
    虚拟机centos7下安装Python3.7
    笔试基础题
    虚拟环境的安装和配置
    记录记录每天的知识点和一些疑惑
    利用最小堆实现topk
    windows和虚拟机环境下的centos7进行文件传输
    vscode中命令行创建文件或文件夹|flask搭建环境的配置
    TS的点与区域的写法
    java——集合——Collections工具类——Collections集合工具类的方法——sort(List)
    java——集合——Set集合——可变参数
  • 原文地址:https://www.cnblogs.com/xinkuiwu/p/12040773.html
Copyright © 2020-2023  润新知