解决 Webpack 打包过程中遇到 Unexpected token < 错误

· 约 6 分钟读完

在使用 Webpack 进行前端工程化开发的过程中,有时候会遇到一个比较常见的错误:Unexpected token <。这个错误的出现通常是因为在打包过程中,Webpack 识别不出 HTML 文件里的语言,导致后续的操作不能继续执行。本文将详细解释这个错误的出现原因,并提供解决方法和示例代码,供大家参考和学习。

出现错误的原因

最常见的情况是在使用 Webpack 打包的过程中,我们会将 HTML 文件作为入口文件之一配置到 Webpack 中,如下所示:

然后使用 html-loader 将 HTML 文件转化成 JS 字符串,在打包的过程中,Webpack 会将这个 JS 字符串执行一遍并返回结果。但是有时候,当在 HTML 文件中使用了像以下内容的标签时:

Webpack 无法识别这些标签,并把它们当作是 JavaScript 代码进行解析,从而导致语法错误。

更进一步的,HTML 加载了 JavaScript 文件,而 JavaScript 里又可能包含有解析错误导致的错误符号 > 或 <。例如:

此时,这些错误符号又会被当做 HTML 标签,从而出现 Unexpected token < 错误。

解决方法

为了解决这个错误,我们可以使用一个插件:html-webpack-plugin。它能够在打包完成后,自动将 HTML 文件以及其他静态文件插入到最终的打包文件中,而不是将 HTML 文件作为入口文件之一。

这个插件的使用非常简单,只需要在 Webpack 配置文件中添加以下代码即可:

这样,Webpack 在打包完成后,就会将指定的 HTML 文件插入到最终的文件中,避免了出现 Unexpected token < 错误。如果还需要将其他静态文件插入到最终打包文件中,可以参考文档中的说明进行配置。其他 html-loader 插件及其它依赖的排错方式,和及时升级和查看文档,也是进一步排错的道路。

示例代码

在本示例中,我们使用 Vue.js 的脚手架工具 Vue CLI 4 创建一个简单的项目,然后添加限制 js 文件包括 .vue 文件,然后在 HTML 文件中嵌入 JavaScript 代码,并使用 html-loader 等转化工具来打包。

  1. 安装 Vue CLI
  1. 新建一个项目
  1. 配置 vue.config.js

添加以下内容:

其中,我们使用了 chainWebpack 对 Webpack 配置进行扩展并排除了对 .vue 文件的验证。

  1. 在 App.vue 中添加 JavaScript 代码

注意,在这里我们使用了一个包含错误符号的 JavaScript 代码。

  1. 打包项目

在终端中可以看到错误如下:

错误提示是因为它无法识别 App.vue 文件中的标签。此时,我们需要安装 html-webpack-plugin 插件,配置 vue.config.js 文件,如上文所述。

最终的 vue.config.js 配置如下:

修改完 vue.config.js 文件后,重新执行 npm run build,此时我们会发现,打包过程中没有出现任何错误,且生成的打包文件中包含了 HTML、JavaScript 和 CSS 等所有文件。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bd1e9ea231b2b7edf2919c