You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
error in ./node_modules/pdfjs-dist/build/pdf.js
Module parse failed: Unexpected character '#' (1413:9)
You may need an appropriate loader to handle this file type.
|
| class PDFDocumentLoadingTask {
| static #docId = 0;
|
| constructor() {
@ ./src/views/excitation/contractManage/pdfjs-webpack.js 1:12-46
...
以及另外一个很相似的报错:
error in ./node_modules/@kk/utils/src/axiosconf.js
Module parse failed: Unexpected token (37:16)
You may need an appropriate loader to handle this file type.
| }
| let user_agent_mini = decodeURIComponent(qs["useragent"] ? qs["useragent"] : "");
| headers = { ...headers, ...{ "User-Agent-Mini": user_agent_mini } }
| return headers;
| }
@ ./node_modules/@kk/utils/src/index.js 14:0-19:21
...
error in ./src/main.ts
Module build failed: TypeError: loaderContext.getOptions is not a function
at getLoaderOptions (/Users/admin/Desktop/kkworld/code/temp/kk-ecology/node_modules/ts-loader/dist/index.js:91:41)
at Object.loader (/Users/admin/Desktop/kkworld/code/temp/kk-ecology/node_modules/ts-loader/dist/index.js:14:21)
@ multi (webpack)-dev-server/client?http://0.0.0.0:8082 webpack/hot/dev-server babel-polyfill ./src/main.ts
error in ./src/main.ts
[tsl] ERROR in /Users/admin/Desktop/kkworld/code/temp/kk-ecology/src/main.ts(7,17)
TS2307: Cannot find module './App' or its corresponding type declarations.
原因是ts文件识别不了.vue文件,需要增加声明文件d.ts:
declare module '*.vue' {
import type { DefineComponent } from 'vue';
const component: DefineComponent<{}, {}, any>;
export default component;
}
一、升级前环境:
二、升级vue
重新安装依赖后,需要在webpack配置的plugins中加入
VueLoaderPlugin
:改好后重启项目。
好的,第一个报错来了:
从报错信息栈可以看到,错误最先是从
VueLoaderPlugin
报出来的。首先想到的就是版本不兼容。因为想要模板内表达式支持ts,所以vue-loader选择了16.8.0版本。尝试降到vue2.7最低要求版本15.10.1(见迁移指南)
降低vue-loader版本后,第二次重启项目,上述问题得到解决。
这时出现的另外一个报错是:
以及另外一个很相似的报错:
上面两个报错信息都比较直白,这些文件用了js新语法,我们需要用合适的loader去转换他们:
上面问题解决之后,接着出现的报错:
报错信息不是很明确,只知道问题出在svg-sprite-loader,首先考虑版本不兼容问题,升级svg-sprite-loader3.5.2 -> 5.2.1。
看来猜测没错,这个问题也解决了。
至此项目可启动成功!
测试一下,可以用新语法了:
三、增加ts支持
1、安装typescript、ts-loader最新版本:
此时安装到的版本分别是:
依赖安装完毕,创建ts配置文件
tsconfig.json
:创建全局声明文件global.d.ts,内容根据项目需要加入,比如:
下一步是入口文件
main.js
改为main.ts
,同时修改webpack配置:这一切改好之后启动项目。
得到的第一个报错信息是:
查了下ts-loader文档,因为我们用的是webpack3.6.0版本,所以不能用太新的ts-loader,不适配,降级到ts-loader@^3.5.0,问题解决。
接着第二个报错:
原因是ts文件识别不了.vue文件,需要增加声明文件d.ts:
到这里,项目可以正常启动了,测试一下.vue文件能不能正常使用ts:
发现报错了:
原因可以参考ts-loader文档,解决方式:
至此ts就可以在项目中正常使用了。
四、总结
升级过程中遇到报错,首先应该考虑版本不兼容问题,查找解决方案也建议首先从官方文档、github issues方面着手。
以上是在对同一个项目进行两次升级后总结的改动较小又行之有效的方案。
在第一次升级中,我首先对项目的webpack版本进行了升级,从3.6.0升到4.46.0,并且顺利完成了vue升级和ts支持。
但是因为webpack3到webpack4的api改动较大,以及相关的plugin、loader等也有较大变动,导致升级后配置无法与当前配置完全等价替换,
因担心由此带来的影响,所以放弃了这个方案。
上文中提到的方案,不需要升级webpack,对项目影响较小。
The text was updated successfully, but these errors were encountered: