一文搞懂JS模块、模块格式、模块加载器和模块打包器(下)

简介: 接下来我们就来一起学习下js模块、模块化解决方案、模块加载器和模块打包器的区别。 本文的主要意图是帮大家快速理解现代前端JS开发的概念,并不会深入去探讨每种工具和模式。

然后使用如下方式导入:


import sayHello, { sayGoodbye } from './lib';
sayHello();  
// => Hello
sayGoodbye();  
// => Goodbye


导出一切你想导出的内容:


// lib.js
// 导出默认函数
export default function sayHello(){  
  console.log('Hello');
}
// 导出非默认函数
export function sayGoodbye(){  
  console.log('Goodbye');
}
// 导出简单值
export const apiUrl = '...';
// 导出对象
export const settings = {  
  debug: true
}


遗憾的是,不是所有的浏览器都支持了原生的模块语法。不过我们在代码中使用原生的模块语法,然后借助babel等转译工具将ES6模块语法转译成ES5所支持的AMD或CommonJS等模块语法。


模块加载器


模块加载器负责解析和加载以特定模块语法定义的模块。模块加载器在运行时执行:


  • 首先在浏览器中加载模块加载器


  • 告诉模块加载器应用的js入口文件


  • 加载器去下载并解析js入口文件


  • 加载器按需下载所有的js文件


打开浏览器的调试面板,你会看到加载器按需加载的js文件。


以下是两个常见的模块加载器:


  • RequireJS:AMD模块加载器


  • SystemJS:CommonJS、AMD、UMD以及System.register 模块加载器


模块打包器


打包器可以替换加载器。不过与加载器不同,打包器是在构建时运行:


  • 使用打包器生成一个js文件(例如app.js)


  • 在浏览器中加载该文件


如果你在浏览器的调试工具的网络面板中,只会看到浏览器只加载了一个文件。浏览器中不需要模块加载器。所有的代码都被打包在了一个js文件中。


在按需加载的场景下,打包器通常也会提供模块加载器。以按需请求对应的js文件。


列举几个常见打包器:


  • webpack


  • rollup


  • browserify


总结


为了更好地理解现代JS开发环境中的各种工具,理解模块、模块格式、模块加载器和模块打包器之间的区别很重要。


模块是可复用的代码片段,它封装了实现细节,并对外暴露一个公开API,以便其他代码加载使用。


模块格式是用来定义模块的语法。很早之前就已经出现了各种模块格式,如AMD,CommonJS,UMD和System.register。从ES6开始原生提供了模块定义语法。


模块加载器在运行时解释并加载以特定模块格式编写的模块,常见的加载器有RequireJS和SystemJS。


模块打包器可以替代模块加载器。它在构建时生成一个 包含所有代码的JS包。常见的打包器有webpack、rollup和browserify。


好啦,读到这里相信你已经对现代JS开发的知识有了更好地理解了。


相关文章
|
4月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
924 1
|
5月前
|
缓存 JavaScript 前端开发
高效打造跨平台桌面应用:Electron加载服务器端JS
【9月更文挑战第17天】Electron 是一个基于 Chromium 和 Node.js 的开源框架,允许使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用。加载服务器端 JS 可增强应用灵活性,实现代码复用、动态更新及实时通信。通过 HTTP 请求、WebSocket 或文件系统可实现加载,但需注意安全性、性能和兼容性问题。开发者应根据需求选择合适方法并谨慎实施。
222 3
|
1月前
|
中间件 API
Next.js 实战 (八):使用 Lodash 打包构建产生的“坑”?
这篇文章介绍了作者在使用Nextjs15进行项目开发时遇到的部署问题。在部署过程中,作者遇到了打包构建时的一系列报错,报错内容涉及动态代码评估在Edge运行时不被允许等问题。经过一天的尝试和调整,作者最终删除了lodash-es库,并将radash的部分源码复制到本地,解决了打包报错的问题。文章最后提供了项目的线上预览地址,并欢迎读者留言讨论更好的解决方案。
41 10
|
3月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
3月前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
67 1
|
3月前
|
缓存 前端开发 JavaScript
JavaScript加载优化
JavaScript加载优化
|
3月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
3月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
4月前
|
JavaScript 中间件 Shell
Node.js JXcore 打包
10月更文挑战第8天
51 1
|
4月前
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
60 2

热门文章

最新文章