Webpack 报错:Unexpected token <

在使用 Webpack 打包前端项目时,有时会遇到报错信息:Unexpected token <。这个错误信息通常出现在浏览器控制台或者 Node.js 命令行中,表示在打包过程中遇到了一个语法错误,而这个错误通常是由于 Webpack 打包了 HTML 或者其他非 JavaScript 文件造成的。

问题分析

当 Webpack 打包项目时,会根据配置文件中的入口文件来分析依赖关系,并将所有的 JavaScript 文件打包成一个或多个 bundle 文件。在这个过程中,Webpack 会解析 JavaScript 文件中的语法,但是如果其中包含了 HTML 或者其他非 JavaScript 的文件,Webpack 就会默认将它们当成 JavaScript 文件来解析,因此就会出现语法错误,导致报错信息:Unexpected token <。

解决方案

方案一:使用 html-webpack-plugin 插件

html-webpack-plugin 是一个可以将 HTML 文件作为入口文件来打包的插件,它会自动将 HTML 文件中的 script 标签引用的 JavaScript 文件打包进 bundle 中。使用这个插件可以避免将 HTML 文件当成 JavaScript 文件来解析,从而解决 Unexpected token < 的问题。

安装 html-webpack-plugin:

--- ------- ------------------- ----------

在 webpack.config.js 中添加以下配置:

----- ----------------- - -------------------------------

-------------- - -
  ------ -----------------
  ------- -
    --------- ------------
    ----- --------- - -------
  --
  -------- -
    --- -------------------
      --------- ------------------
    --
  -
--

这样就可以将 src/index.html 文件作为入口文件来打包,同时将其中引用的 JavaScript 文件打包进 bundle 中。

方案二:使用 file-loader 或者 url-loader

如果项目中有其他非 JavaScript 的文件,例如图片、样式等,也会出现 Unexpected token < 的错误。这时可以使用 file-loader 或者 url-loader 来解决这个问题。

安装 file-loader 或者 url-loader:

--- ------- ----------- ----------
- --
--- ------- ---------- ----------

在 webpack.config.js 中添加以下配置:

-------------- - -
  ------ -----------------
  ------- -
    --------- ------------
    ----- --------- - -------
  --
  ------- -
    ------ -
      -
        ----- -------------------
        ---- -
          -
            ------- --------------
            -------- -
              ----- ---------------
              ----------- ---------
            -
          -
        -
      -
    -
  -
--

这样就可以将图片等非 JavaScript 文件打包进 bundle 中,避免了将它们当成 JavaScript 文件来解析的错误。

总结

在使用 Webpack 打包前端项目时,遇到 Unexpected token < 的错误通常是由于将 HTML 或者其他非 JavaScript 文件当成 JavaScript 文件来解析造成的。解决这个问题的方法有两种:一种是使用 html-webpack-plugin 插件将 HTML 文件作为入口文件来打包,另一种是使用 file-loader 或者 url-loader 将非 JavaScript 文件打包进 bundle 中。在实际项目中,可以根据具体情况选择不同的解决方案来解决这个问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65f166642b3ccec22fa1d1af