怎样让百度收录自己的网站,网站制作费用大概多少,昆明会员网站建设,建设部网站最新政策说一下模块化方案
模块化是为了解决代码的复用和组织问题#xff0c;可以说有了模块化才让前端有了工程的概念#xff0c;模块化要解决两大问题 代码隔离和依赖管理#xff0c;从node.js最早发布的commonjs 到浏览器端的 AMD,CMD 规范以及兼容的 UMD 规范#xff0c;再到现…说一下模块化方案
模块化是为了解决代码的复用和组织问题可以说有了模块化才让前端有了工程的概念模块化要解决两大问题 代码隔离和依赖管理从node.js最早发布的commonjs 到浏览器端的 AMD,CMD 规范以及兼容的 UMD 规范再到现在主流的ES Module规范。
AMD CMD 都是为了解决浏览器端的模块化问题区别就是代码执行时机不同CMD是懒执行。UMD就是兼容CommonJS AMD 以及全局变量来加载模块。ESM是在语言标准的层面上实现了模块功能Node.js也支持13版本后.mjs 或者声明type:module
CJS和ESM的区别
CommonJS 模块输出的是一个值的拷贝ES6 模块输出的是值的引用。CommonJS 模块是运行时加载ES6 模块是编译时输出接口。ES6 模块之中顶层的this指向undefinedCommonJS 模块的顶层this指向当前模块的输出module.exportsCommonJS 模块的require()是同步加载模块动态import是异步加载有一个独立的模块依赖的解析阶段。
CJS和ESM的原理可以再研究
ESM生态在逐渐发展随着 vite等工具的流行no-bundle概念也在逐渐推广CommonJS的历史包袱还需要一定的时机去转化。
介绍一下vite 相比webpack的优缺点
vite把自己定义为工具链很多可以开箱即用配置简单生态也再不断完善ESMbundle-less也是大势所趋。基于ESM和ESBuild 的Dev Server冷启动速度快按需编译webpack 兼容性好生态完善
说一下Rollup
rollup是一款打包构建工具通常用来构建一些库比如Vue等都是用rollup构建的。是基于ESM的打包器支持tree-shakingscope hoisting等特性。
可以输出多种模块规范的代码也有丰富的插件。Rollup 插件基本就是各种 Hook 函数的组合。
AST和Babel
抽象语法树对代码的一种抽象表示是树形结构。应用代码高亮JS转义代码压缩ESLintPrettier等babel 编译 ES5 的过程parse解析代码生成AST、transform通过 traverse 遍历 AST 进行处理转换、generator (生成代码)
包管理工具
pnpm 解决问题幽灵依赖和分身依赖相同依赖不同版本硬链接 保证相同的包不会被重新新增磁盘的目录下相当于备份软连接node_modules 里的软链接到对应的.pnpm下的依赖解决幽灵依赖问题