CRA生成的index.html相关知识

CRA生成的index.html相关知识

作为前端开发工程师,如果采用React开发前端工程,我们常常使用create-react-app创建项目架构。使用CRA打包得到的前端项目中包含index.html文件,本文对此文件中的一些细节做了剖析,总结index.html中不被注意的技术细节。

1. index.html中包含的script脚本的平稳退化

html 复制代码
<noscript>You need to enable javascript to run this app. </noscript>

在用户使用的浏览器不支持或者用户手动禁用了javascript脚本功能的时候,提示用户升级浏览器或者关闭对脚本的禁用。

2. 对样式引入的处理

在react的组件中通过类似import "./index.css"等方式引入样式文件的时候,通过webpack的打包处理,最终呈现在index.html中的是<head>容器标签中的一个<style></style>标签。通常来说这个新增的style标签位于head的最后。

3. index.html文件中是如何加载打包之后的bundle.js

html 复制代码
<script defer src="/static/js/bundle.js"></script>

可以看出来,webpack打包之后的bundle.js将会以defer 的方式放在一个script标签中进行加载,同样这个标签也是放在<head>标签的底部。

4. 如果在项目中使用了antd等组件库,那么组件库使用到的样式文件是以什么样的方式加载的

如果项目中使用了诸如antd之类的组件库,那么该组件库会将自己依赖的一些样式文件,以<style>标签的方式插入到index.html文件中的<head>标签中。不过需要注意的是,组件库的样式文件的优先级低于用户定制,所以这些自动插入的<style>标签的位置是<head>标签的顶部,这一点和用户自定义的样式文件的位置是不同的。

5. 如何在index.html文件中设置此网页的图标

使用<head>标签所包裹的link标签可以实现对网页图标的指定:

html 复制代码
<link rel="icon" href="/favico.ico">

需要注意的是link是一个单标签,而对于单标签而言,是没有结束标签的,并且可以使用/对标签进行封闭或者不进行封闭都是可以的。

如果是在移动端,那么可能用到的是:

html 复制代码
<link rel="apple-touch-icon" href="/logo192.png" />

6.manifest的作用

在index.html文档内容中还可以看到:

html 复制代码
<link rel="manifest" href="/manifest.json">

对于manifest文件的作用,直接参考官方的定义即可: manifest.json provides metadata used when your web app is installed on a user's mobile device sor desktop.

总结来说,就是提供应用的元信息的。

7. 如何设置文档的解析语言

文档通过html标签告诉浏览器自己使用的语言,比如说如果此文档的语言为英语:

html 复制代码
<html lang="en">

</html>

8. 关于index.html文件中的%PUBLIC_URL%

这个是占位符,其真实值会在webpack打包的时候由特定的插件处理。具体来说,webpack中处理这个占位符的插件为InterpolateHTMLPlugin和HTMLWebpackPlugin:

js 复制代码
plugins: [
    ...
    new InterpolateHTMLPlugin(HTMLWebpackPlugin, env.raw),
]

其中,env.raw的格式如下:

js 复制代码
{
    NODE_ENV: 'production',
    PUBLIC_URL: '.',
    FAST_REFRESH: true,
}

PUBLIC_URL的值实际上是由ppackage.json中的homepage; process.end.PUBLIC_URL; process.env.NODE_ENV三个部分共同决定的!

相关推荐
多多*13 分钟前
Spring之Bean的初始化 Bean的生命周期 全站式解析
java·开发语言·前端·数据库·后端·spring·servlet
linweidong18 分钟前
在企业级应用中,你如何构建一个全面的前端测试策略,包括单元测试、集成测试、端到端测试
前端·selenium·单元测试·集成测试·前端面试·mocha·前端面经
满怀101538 分钟前
【HTML 全栈进阶】从语义化到现代 Web 开发实战
前端·html
繁依Fanyi1 小时前
用 UniApp 构建习惯打卡 App —— HabitLoop 开发记
javascript·uni-app·codebuddy首席试玩官
东锋1.31 小时前
前端动画库 Anime.js 的V4 版本,兼容 Vue、React
前端·javascript·vue.js
满怀10151 小时前
【Flask全栈开发指南】从零构建企业级Web应用
前端·python·flask·后端开发·全栈开发
小杨升级打怪中1 小时前
前端面经-webpack篇--定义、配置、构建流程、 Loader、Tree Shaking、懒加载与预加载、代码分割、 Plugin 机制
前端·webpack·node.js
Yvonne爱编码2 小时前
CSS- 4.4 固定定位(fixed)& 咖啡售卖官网实例
前端·css·html·状态模式·hbuilder
SuperherRo2 小时前
Web开发-JavaEE应用&SpringBoot栈&SnakeYaml反序列化链&JAR&WAR&构建打包
前端·java-ee·jar·反序列化·war·snakeyaml
大帅不是我2 小时前
Python多进程编程执行任务
java·前端·python