vue3+webpack构建库打包报错Module parse failed: Unexpected token (2:2)File was processed with these loaders

背景:
之前使用vue2+webpack开发了一个npm库,现在想升级为vue3版本(纯手工)
因为没有使用脚手架,得自己写webpack的配置.
vue2升级到vue3,vue-loader也得升级到17.0.0以上。之前VueLoaderPlugin的这个文件就不存在了,我就直接注释了这个plugin(怪我webpack还是不够熟悉)
在这里插入图片描述
问题:
然后执行打包就一直报错,下面是一部分
Module parse failed: Unexpected token (2:2)File was processed with these loaders:*./node modules/vue-loader/dist/index.jsYou may need an additional loader to handle the result of these loaders.
<el-menu
在这里插入图片描述
开始一直在通过上面的部分找问题:以为是缺少了什么loader,查询了半天还是没解决
在这里插入图片描述
最后看到重点:vue-loader was used without the corresponding plugin. Make sure to include Vueloaderplugin in your…
没有使用VueLoaderPlugin
在这里插入图片描述

解决:
在plugin中加入VueLoaderPlugin
在这里插入图片描述
在这里插入图片描述
webpack配置:

const path = require('path')
const ProgressBarPlugin = require('progress-bar-webpack-plugin')
const VueLoaderPlugin = require('vue-loader').VueLoaderPlugin;
const TerserPlugin = require('terser-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

const { resolve } = require('path')

module.exports = {
  // 模式
  mode: 'production',
  // 入口
  entry: {
    app: ['./src/index.js'],
    util: ['./src/util']
  },
  // 输出
  output: {
    path: path.resolve(process.cwd(), './lib'),
    publicPath: '/lib/',
    // 输出的文件名
    filename: '[name].js',
    // 初始的chunk文件名称
    chunkFilename: 'js/[id].js',
    //  library 暴露为 AMD 模块。 在 AMD 或 CommonJS 的 require 之后可访问(libraryTarget:'umd')
    libraryTarget: 'umd',
    // 入口的默认导出将分配给 library target:
    // if your entry has a default export of `MyDefaultModule`
    // var MyDefaultModule = _entry_return_.default;
    // libraryExport: 'default',
    // 会把 AMD 模块命名为 UMD 构建
    umdNamedDefine: true,
    // 为了使 UMD 构建在浏览器和 Node.js 上均可用,应将 output.globalObject 选项设置为 'this'。对于类似 web 的目标,默认为 self。
    globalObject: 'typeof self !== \'undefined\' ? self : this'
  },
  // 解析
  resolve: {
    // 能够使用户在引入模块时不带扩展.尝试按顺序解析这些后缀名。如果有多个文件有相同的名字,但后缀名不同,webpack 会解析列在数组首位的后缀的文件 并跳过其余的后缀。
    extensions: ['.js', '.vue', '.json']
    // 创建 import 或 require 的别名,来确保模块引入变得更简单。

  },

  // 优化
  optimization: {
    // 允许你通过提供一个或多个定制过的 TerserPlugin 实例, 覆盖默认压缩工具(minimizer)
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          output: {
            comments: false
          }
        }
      })
    ]
  },
  // 性能
  performance: {
    // 不展示警告或错误提示。
    // 官网推荐使用error,有助于防止把体积大的bundle部署到生产环境,从而影响网页的性能
    // 很奇怪这里要把它关闭
    hints: false
  },
  // stats对象
  stats: {
    // 告知 stats 是否添加关于子模块的信息。
    children: false
  },
  // 模块
  module: {
    // 使用babel-loader和vue-loader
    rules: [
      {
        test: /\.(jsx?|babel|es6)$/,
        include: process.cwd(),
        loader: 'babel-loader'
      },
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          // compilerOptions: {
          //   preserveWhitespace: false
          // }
        }
      },
    
      // 由于在组件中写了>>>这种形式的深度选择器,这种方式在sass中不支持,固这里不能和sass合并,可以将深度选择器改成:deep()形式
      { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] },
      { test: /\.scss$/, use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'] },
      {
        test: /\.(jpg|png|gif|bmp|jpeg)$/,
        use: [{ loader: 'url-loader', options: { esModule: false } }]
      },
      { test: /\.(ttf|eot|svg|woff|woff2)$/, use: [{ loader: 'url-loader', options: { esModule: false } }] }
    ]
  },
  // 插件
  plugins: [
    new ProgressBarPlugin(),
    new VueLoaderPlugin(),
    new MiniCssExtractPlugin({
      filename: 'css/index.css',
      chunkFilename: 'css/[name].[contenthash:8].css'
    })
  ]
}

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用内容,这个报错是因为vue-loader版本过高,需要下载低版本的vue-loader来解决。你可以使用以下命令来安装低版本的vue-loader: npm i vue-loader@13.0.0 --save-dev 同时,你可以参考这篇文章来获取更多信息:https://www.freesion.com/article/87781082538/ 对于引用内容,报错"Module parse failed: Unexpected token (95:59) You may need an appropriate loader to handle this file type."是因为在你安装layui时遇到了问题。这个错误通常发生在模块解析阶段,可能是因为缺少适当的加载器来处理该文件类型。你可以尝试安装相应的加载器来解决这个问题。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Module parse failed: Unexpected token (135:0) You may need an appropriate loader to handle this file](https://blog.csdn.net/YI_Zyd/article/details/115726208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Module parse failed: Unexpected token](https://download.csdn.net/download/weixin_38535221/14886682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值