无需CRA搭建React项目遇阻,求解该场景下Webpack的作用
你直接打开index.html无法运行的核心原因是:npm安装的React、React-DOM都是CommonJS/ES模块格式的包,浏览器原生不识别import React from 'react'这类模块导入语法,而且node_modules目录下的文件路径浏览器也没法直接解析,自然会报错。而Webpack在这个简化场景里,主要解决了这些问题,具体作用如下:
模块打包与路径解析
Webpack会遍历你的index.js以及它依赖的所有模块(包括node_modules里的React、React-DOM),把这些分散的模块按照依赖关系打包成一个(或多个)浏览器能直接执行的普通JS文件。它会自动处理import/require这类模块化语法,同时帮你解析node_modules里的依赖路径,不用你手动写复杂的相对路径或者依赖全局变量。转换模块格式到浏览器兼容代码
你通过npm安装的React包,内部用的是ES模块或CommonJS规范,哪怕浏览器原生支持ES模块,也没法直接引用node_modules里的文件(跨域和路径问题)。Webpack会把这些模块统一转换成浏览器可以直接运行的代码,让你不用再依赖全局的React对象(像CDN那样),而是用模块化的方式开发。自动关联资源与HTML
如果你用了html-webpack-plugin这类插件,Webpack会自动把打包好的JS文件插入到你的index.html里,不用你手动写<script>标签引用打包后的文件。就算不用插件,你也可以手动引用打包后的JS文件,而这个文件已经是浏览器能识别的格式了。本地依赖的整合
之前用CDN是依赖外部服务器上的React代码,而npm安装后是本地依赖。Webpack相当于把本地的React、React-DOM代码和你的业务代码整合在一起,打包成独立的文件,让你的项目不依赖外部CDN,也能正常运行。
内容的提问来源于stack exchange,提问作者robin14dev

