ERROR in ./node_modules/vue-router/dist/vue-router.mjs 被报错折磨半天?真相竟是……

bug描述

今天接到一个“简单”任务:给一个以前的老 Vue 项目改个小功能。

我信心满满地拉下代码,执行:

npm install
npm run serve

结果——直接报错!😓

报错截图:Module parse failed: Unexpected token

错误信息赫然写着:

./node_modules/vue-router/dist/vue-router.mjs

心酸过程:我的第一反应:Node 版本不对?

我问同事,他们也说:“我们都能跑,应该是你 Node 版本问题。”

于是……我开始了疯狂的版本切换之旅:
从 v16.17.1 → v18.20.8 → v20.19.4
安了删,删了安,重启终端、清缓存、重装依赖……
整整折腾了 3 个小时!

成功启动

但——还是报同样的错!

我快崩溃了 😭

转机:换个关键词搜索

实在不行,我冷静下来,复制报错中的关键路径:
@ ./node_modules/vue-router/dist/vue-router.mjs

粘贴到百度,终于!找到了几篇真实踩过坑的人写的记录。

其中一条点醒了我:

安装vue-router时没有指定版本,然后npm自动下的是最新版(vue-router版本太高和vue2起冲突了)

🔥 真相大白:版本自动升级惹的祸!

打开 package.json,一看:

"dependencies": {
  "vue-router": "^4.0.14",
}

问题就出在这个 ^ 上!
^4.0.14表示:安装 4.x 的最新版。

解决方案:锁定版本号!

步骤 1:删除 ^,固定版本

"dependencies": {
  "vue-router": "4.0.14",
}

步骤 2:彻底清理重装

删除node_modulespackage-lock.json

步骤 3:重新启动

npm run serve

成功运行!世界清净了!

血泪教训 & 经验总结

不要盲目换 Node 版本!

很多报错和 Node 无关,而是依赖版本冲突。

老项目务必锁定依赖版本!

删除 ^ 和 ~,使用精确版本号,避免自动升级引入不兼容包。

遇到报错,先搜完整错误关键词!

AI 回答可能泛泛而谈,但真实开发者踩过的坑记录往往一针见血。

.mjs 报错 = 现代 JS 语法 + 旧构建工具不兼容

尤其在 Vue 2 项目中,看到 vue-router.mjs 基本就是版本装错了。

维护老项目时,最好保留一份 package-lock.json!

它能确保每次安装的依赖完全一致。

写在最后

这次经历让我深刻体会到:技术问题不怕难,怕的是方向错了还死磕。

下次再遇到奇怪报错,我会先问自己:
“是不是依赖版本不对?是不是新旧框架混用了?”

希望这篇记录能帮到同样被 .mjs 折磨的你!
少走弯路,多喝热水,代码无 bug! 💻✨

✍️ 作者: 一个被老项目虐哭又复活的前端
📅 日期: 2025年12月 17日
🔗 欢迎转发,禁止搬运

error in ./node_modules/pdfjs-dist/build/pdf.mjs Module parse failed: Unexpected token (363:14) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | } | function _isValidProtocol(url) { > switch (url?.protocol) { | case "http:": | case "https:": @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/filePreview/components/PDFPerview.vue?vue&type=script&lang=js 12:40-61 @ ./src/components/filePreview/components/PDFPerview.vue?vue&type=script&lang=js @ ./src/components/filePreview/components/PDFPerview.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/filePreview/index.vue?vue&type=script&lang=js @ ./src/components/filePreview/index.vue?vue&type=script&lang=js @ ./src/components/filePreview/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/backlog/components/notice.vue?vue&type=script&lang=js @ ./src/views/backlog/components/notice.vue?vue&type=script&lang=js @ ./src/views/backlog/components/notice.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/backlog/index.vue?vue&type=script&lang=js @ ./src/views/backlog/index.vue?vue&type=script&lang=js @ ./src/views/backlog/index.vue @ ./src/router.js @ ./src/main.js @ multi (webpack)-dev-server/client?http://localhost:81/sockjs-node (webpack)/hot/dev-server.js ./src/main.js分析该报错
10-17
下载uuid报错Failed to compile with 5 errors 15:20:37 error in ./node_modules/uuid/dist/esm-browser/v35.js Module parse failed: Unexpected token (19:18) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | namespace = parse(namespace); | } > if (namespace?.length !== 16) { | throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); | } @ ./node_modules/uuid/dist/esm-browser/v5.js 2:0-41 3:0-36 3:0-36 3:0-36 5:11-14 7:9-12 8:9-12 @ ./node_modules/uuid/dist/esm-browser/index.js @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue @ ./src/router/index.js @ ./src/main.js @ multi (webpack)-dev-server/client?http://192.168.0.29:80&sockPath=/sockjs-node (webpack)/hot/dev-server.js ./src/main.js error in ./node_modules/uuid/dist/esm-browser/v6.js Module parse failed: Unexpected token (5:13) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | import v1ToV6 from './v1ToV6.js'; | function v6(options, buf, offset) { > options ??= {}; | offset ??= 0; | let bytes = v1({ ...options, _v6: true }, new Uint8Array(16)); @ ./node_modules/uuid/dist/esm-browser/index.js 10:0-40 10:0-40 @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue @ ./src/router/index.js @ ./src/main.js @ multi (webpack)-dev-server/client?http://192.168.0.29:80&sockPath=/sockjs-node (webpack)/hot/dev-server.js ./src/main.js error in ./node_modules/uuid/dist/esm-browser/v1.js Module parse failed: Unexpected token (6:25) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | function v1(options, buf, offset) { | let bytes; > const isV6 = options?._v6 ?? false; | if (options) { | const optionsKeys = Object.keys(options); @ ./node_modules/uuid/dist/esm-browser/index.js 5:0-40 5:0-40 @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue @ ./src/router/index.js @ ./src/main.js @ multi (webpack)-dev-server/client?http://192.168.0.29:80&sockPath=/sockjs-node (webpack)/hot/dev-server.js ./src/main.js error in ./node_modules/uuid/dist/esm-browser/v7.js Module parse failed: Unexpected token (7:40) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | let bytes; | if (options) { > bytes = v7Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.seq, buf, offset); | } | else { @ ./node_modules/uuid/dist/esm-browser/index.js 12:0-40 12:0-40 @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue @ ./src/router/index.js @ ./src/main.js @ multi (webpack)-dev-server/client?http://192.168.0.29:80&sockPath=/sockjs-node (webpack)/hot/dev-server.js ./src/main.js error in ./node_modules/uuid/dist/esm-browser/v4.js Module parse failed: Unexpected token (9:33) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | } | options = options || {}; > const rnds = options.random ?? options.rng?.() ?? rng(); | if (rnds.length < 16) { | throw new Error('Random bytes length must be >= 16'); @ ./node_modules/uuid/dist/esm-browser/index.js 8:0-40 8:0-40 @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/components/singleDevice/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/components/layerComp/index.vue @ ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue?vue&type=script&lang=js @ ./src/views/largeScreen/index.vue @ ./src/router/index.js @ ./src/main.js @ multi (webpack)-dev-server/client?http://192.168.0.29:80&sockPath=/sockjs-node (webpack)/hot/dev-server.js ./src/main.js
06-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sherry Tian

打赏1元鼓励作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值