Reactjs 在安装包之后导入包与在创建新的react应用程序时将其包含在index.html中有什么区别?
当创建新的react应用程序时,我们使用CreateReact应用程序。它创建多个文件。其中index.html是呈现的html应用程序,其中根据react应用程序App.jsx放置多个jsx元素 我很好奇,导入谷歌字体、bootstrap、jquery和其他不同的外部插件的最佳方式是什么 正如我所研究的,有两种导入外部模块的方法。如果我们考虑从CDN导入的Bootstrap: 然后,导入的一种方法是将其放在public/index.html中:Reactjs 在安装包之后导入包与在创建新的react应用程序时将其包含在index.html中有什么区别?,reactjs,font-awesome,react-bootstrap,Reactjs,Font Awesome,React Bootstrap,当创建新的react应用程序时,我们使用CreateReact应用程序。它创建多个文件。其中index.html是呈现的html应用程序,其中根据react应用程序App.jsx放置多个jsx元素 我很好奇,导入谷歌字体、bootstrap、jquery和其他不同的外部插件的最佳方式是什么 正如我所研究的,有两种导入外部模块的方法。如果我们考虑从CDN导入的Bootstrap: 然后,导入的一种方法是将其放在public/index.html中: # Rest of the index.html
# Rest of the index.html code
<div id="root"></div>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
# Rest of the index.html code
#index.html代码的其余部分
#index.html代码的其余部分
另一种方法是使用npmi安装引导程序bootstrap@4.3.1--保存
,然后将其作为导入放到src/index.js中
上述内容可以应用于多个地方。比如说,我们必须导入popper.min.js或jquery.js或导入css字体。哪个更好?是否将其放在index.html或index.js中?
另外,将该库放置在两个不同的位置之间的主要区别是什么?两种方法都具有使该库可供应用程序使用的类似效果 HTML方法导致浏览器在运行时获取并执行依赖项。与在页面上包含
img
s非常相似,您可以在页面上包含script
s,其中脚本的源代码可以是内联的,也可以是来自另一个URI的。因此,假设您创建了一个HTML页面,在其周围放置了许多script
标记,然后在浏览器中点击该页面。您的浏览器将扫描HTML页面,识别所有script
标记并开始下载它们。它还将记住找到脚本
标记的顺序,并将按该顺序解析和执行它们(除非对它们使用异步
和延迟
属性)
好的,所以,浏览器看到由各种元素组成的HTML页面,包括一些脚本标记,下载它们(可能并行),然后执行它们(顺序)。现在,这些脚本可能知道也可能不知道页面上彼此的任何信息
现在,让我们进入React和其他富Javascript应用程序领域,它们依赖于各种Javascript库
当您进行Javascript模块捆绑
时,即从“package”
导入{something},这将在编译时被您的Javascript编译器获取,例如,当您进行npm运行build
时,通过create React app进行反应,或Angular的等效脚本,或其他编译器,如webpack,这些编译器不仅扫描单个文件,而且扫描整个应用程序。它们通常从一个入口点开始,例如index.jsx
,然后发现依赖关系图,递归地遍历它们识别并发现这些依赖关系的每个文件或模块等等。一旦编译器发现、解析、构建并绑定了你的应用程序,你通常会得到一个Javascript文件(例如,main.[some hash].js
),它是你的应用程序和所有依赖项(你导入的所有其他模块)绑定在一个文件中
所以,你可以看到最大的区别是:
- HTML脚本是浏览器在运行时下载和处理的独立资源
- Javascript模块在编译时被发现,并最终与应用程序代码捆绑在一个文件中
为了说明更大的区别,我把诸如包拆分和动态引用等概念放在一边;当你深入研究每种方法时,你最终会读到它们的变化
HTML脚本的优点:
它们是独立获取的,可能来自CDN,如果其他网站需要它们,甚至可能已经缓存在您的浏览器中,并在以前下载过它们。因此,jQuery、loDash等都是可能已经下载的常见软件包,您的浏览器将受益于其内部缓存
它们可以并行下载;尽管您可以依靠浏览器来确保它们按顺序执行。因此,例如,如果您自己的脚本依赖于已经加载的jQuery,那么您所需要做的就是先
,然后
,这样的顺序将得到遵守
Javascript模块优势
您的代码可能不需要整个jQuery、lodash或您正在引用的任何其他库。通过导入源代码中所需的依赖项的任何函数,智能编译器可能能够巧妙地将这些函数从较大的库(树摇动库)中剥离出来,最终获得较小的总体下载负载
您的整个捆绑包可以缩小,从而产生一个优化的包
您的整个捆绑包将(/可以)放在一个文件中。只需下载一次,您的整个应用程序即可加载并随时可用。无需担心从各种URL下载各种资源
混合方法可以
请随意使用混合解决方案!如果检查编译的React代码,您将看到createReact应用程序
编译器将在HTML文档的末尾插入元素。这意味着您的应用程序可以依赖HTML文档中较高位置包含的其他
`s。因此,可以随意加载一些HTML库,并通过JS模块引用其他库。事实上,有些情况下你会想这样做;例如,包括谷歌地图脚本可以通过HTML脚本指令轻松完成,您的React应用程序仍然可以使用GMaps库