上个月,我正在努力为“为什么我不能仅将.scss
文件插入链接元素的href
并进行开发工作?来自静态文件中相邻项目的node_modules
的.css
文件?”
这样做的一个至关重要的原因是由于JS框架依赖多次跨性和捆绑过程的方式。
在本地开发环境中,热模块重新加载(HMR)的快速视觉反馈会使我们忘记,即将发出的应用程序代码不会以相同的方式处理文件!
运行时与建立时间
我们无法在没有提及的情况下讨论“构建”在JavaScript应用程序中的含义:
- 运行时
- 建立时间
- 解析和执行时间
注意:我省略了编译时间,因为JS是interpreted language
运行
当软件执行时,运行时会发生。这可以是当应用程序提出请求和服务器端口计算过程后响应时。
。我们在命令中使用node
或npm
的事实进一步混淆了运行在本地开发环境中的运行时。 ð
tldr:npm
和yarn
是包装管理人员。
节点和DENO是runtimes,它为您编写的代码创建环境,以执行,构建甚至部署。
在开发时,运行时间允许您访问后端,输入环境变量 - 所有位置都在同一位置而无需浏览器。
*如果您想拆开头发,浏览器可以说是JavaScript文件的运行时环境。
建立时间
构建时间包括以下过程:
汇编/移动
乔纳斯·邦迪(Jonas Bondi)。 Angular vs. React: Compilers,中等,2017年。
当您编写现代JavaScript应用程序时,通常需要使用像Babel或TypeScript这样的转板器配备项目,以将JavaScript编译为ES5或COMPORJS,这是Node最初引入的JavaScript的一种形式,所有浏览器都可以解析。
对于像Sass这样的CSS预处理器的情况,它正在编译为CSS。使用PostCSS,可能会生成独特的类并进行三个。
缩小
将所有代码合并到一个文件中,并删除所有过多的间距,使其紧凑,捆绑和运行速度更快。
代码
块和将代码分离到相关的.js
文件 - 使得您只能导入与按钮组件相关的文件,而不是整个库。
运行npm run build
时,上面提到的所有过程都开始准备准备的JavaScript,CSS和HTML(通常带有源地图)的生产捆绑包,这些捆绑会准备好用于生产部署。
开发模式
在开发模式下,构建工具WebPack的Hot Module Replacement (HMR)功能允许应用程序在运行时方便地重建。
在大多数情况下,构建了应用程序代码的本地缓存文件夹,随后的更改不断重建,以使开发人员在开发时快速反馈最终用户的体验... 但是 all那些新鲜的构建不出现在您的输出(dist/
)文件夹中。
今天,有很多精美的功能优化了能够预览您在JS框架中编写的代码的经验(咳嗽 Ahead-Of-Time compiling in angular in Angular,incremental builds,gatsby和Next,Incremental Static Regeneration在DEV和服务器中使用此类缓存来减少其静态生成视图的重建时间。)
随着新一代的构建工具和用Rust和Go编写的捆绑机的兴起,构建时间大大降低了。
执行时间处理时间
执行发生在浏览器中。在单页应用程序中,从服务器返回的缩小文件通过发生的after you type the URL into the browser。
图2.1客户端Web应用程序的生命周期从用户指定网站地址(或单击链接)开始,并在用户离开网页时结束。它由两个步骤组成:页面构建和事件处理。
"Secrets of the Javascript Ninja, Second Edition"撰写的John Resig,Bear Bibault,Josip Maras,2016年8月。
在Web 1.0次中,将通过解析HTML文件创建一个DOM树。如今,JS功能(如React.createElement()
)创建并附加了这些节点。
在initial load上,JS被读取(解析)一次至底部一次,并以第一对开的方式为每个函数调用设置相关的执行上下文。随着会话的继续,将功能以最后的优势调用。
Sukhjinder Arora,"Understanding Execution Context and Execution Stack in Javascript",中,2018年。
除了加载时间外,脚本时间还构成了事件听众的注册和会话期间的动态内容。
很多foundational resources封面JavaScript执行,但是我们很少连接所有类型的“时间”以查看它们的位置!
您在2023年对哪种构建工具感到兴奋?
您在编程职业中很难找到什么概念?
在评论中让我知道。
感谢@naismith Shreya Dahal,Chang,Jimmy Jansen,Matt Mackay帮助我澄清了我的心理模型!
相关阅读
丹·阿布拉莫夫(Dan Abramov)。 "How does the development mode work?",过度反应。 2019年8月4日。
休·哈沃思。 "Comparing the New Generation of Build Tools", css-Tricks ,2021年4月8日(2022年1月5日更新)
i"State of JS 2021: Build Tools",JS州。 2022。
Marico Kakaka。 "Inside look at modern web browser (part 3)" Chrome开发人员,2020年8月18日。