让前端飞Web前端之路

前端知识体系4.前端工程化2.其它

2020-04-13  本文已影响0人  前端辉羽

本文目录

1.简单介绍下前端模块化规范:Amd,Cmd,Commonjs和ES6的module

AMD
AMD是RequireJS在推广过程中对模块定义的规范化产出。
AMD规范则是异步加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
CMD
CMD是SeaJS在推广过程中对模块定义的规范化产出。
CMD是同步模块定义,注意CMD也是异步加载。
二者的区别是前者是对于依赖的模块提前执行,而后者是延迟执行。 前者推崇依赖前置,而后者推崇依赖就近,即只在需要用到某个模块的时候再require。
CommonJS
Nodejs中使用的是这个规范。CommonJS的核心思想就是通过 require 方法来同步加载所要依赖的其他模块,然后通过 exports 或者 module.exports 来导出需要暴露的接口。
module.exports默认导出的是一个对象,如果在文件demo-b.js中什么代码都不写,然后在另外一个文件demo-a.js中导入这个文件

const b  = require('./b')
console.log(b)

b会是一个默认的对象,如果在demo-b.js中写入module.exports = '123',甚至让其等于一个函数,一个变量,在别的文件导入的时候也会导入对应的字符串/函数/变量。
注意:
exports是为module.exports,在导出的时候exports.xxx = xxx就相当于是module.exports.xxx = xxx,但需要特别注意的是,不能让exports直接等于某个对象或者其它类型的数据,这样会切断exports和module.exports的联系,所以为了避免产生不必要的错误,在使用CommonJS规范的时候,统一使用module.exports.xxx= xxx导出数据。
CommonJS模块是同步加载的,即只有加载完成,才能执行后面的操作。
CommonJS输出是值的拷贝,同时模块在首次执行后就会缓存,再次加载只返回缓存结果,如果想要再次执行,可清除缓存。
ES Module
在ES6中,我们可以使用 import 关键字引入模块,通过 exprot 关键字导出模块,功能较之于前几个方案更为强大,也是我们所推崇的。
在一个文件或模块中,export、import可以有多个,export default仅有一个。
export不能直接导出一个变量或者是一个其它类型的数据,在使用export导出时,对应的导入也需要通过{}进行解构才能获得export导出的数据,并且变量名也必须是一致的。
需要注意的是,export可以导出一个现定义的变量,比如

export const Id = {XXXX}

倒入的时候需要{}进行解构

import { Id } from 'xxxx'

export default的导出则可以自由很多,在导入的时候也可以自定义变量名,也不需要{}解构。

import 变量名 from ‘模块’

ES Module与CommonJS的对比

2.babel的定义

Babel 是一个 JavaScript 编译器
Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。

3.babel的工作流程

Babel的编译过程和大多数其他语言的编译器相似,可以分为三个阶段:

4.Base64 的原理?编码后比编码前是大了还是小了

Base64是一种基于用64个可打印字符来表示二进制数据的表示方法。编码后的数据比原始数据略长,为原来的4/3。

5.说一说require标识符的加载规则

1.如果是以“./”“../”“/”开头的,会被定义为路径形式的模块(./ 代表当前目录,../ 代表上一级目录, /表示的是当前所在的磁盘根路径,这种表达形式在项目中几乎不会使用。)
2.如果不是以“./”“../”“/”开头的,则会验证是否为node的核心模块,如fs,http(核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了)。
3.如果前两者都不是,则会按照第三方模块进行加载。
第三方模块的加载规则:
var template = require('art-template')

上一篇 下一篇

猜你喜欢

热点阅读