Vue Router报错 Error: Cannot find module ‘@/views/xxx‘ at webpackEmptyContext


起因: 拉旧项目重跑发现运行报错,猜测是包更新导致部分写法不兼容。之后发现是原写法在webpack4中不兼容。所以这篇文章主要讲两部分:

  1. 如何解决webpack4 动态编译import报错

  2. imoort 和 require到底有什么区别?两者是否可以无缝替换?

1 解决报错

2 require/import的关系和区别?

1. require/exports 和 import/export出现顺序

先有require/exports 才有 import/export ; import / export 其实是个弟弟,最后都会被babel编译为 require / exports

2.为啥 export 是不厉害,它不是 ES6 支持的规范吗?

答:出生背景不同。 require在2010年左右诞生,CommonJS 中大量引用了 require, 而 CommonJS又是node.js的规范。而import作为ES6的规范,大概在14.15年才被大家熟知。 同时babel会将import编译成 require(为了能够引用npm包)所以,import当然不能完全替换require,因为所有import,最后都会被转化成require。至少在CommonJS依旧作为node.js规范的今天是不可以的。

3.为什么我们经常使用import,而不经常使用require?

 答:  
    1. import只是请求模块中需要的部分, require是整包加载。相比之下import性能更好一点,节约了内存
    2. import是异步加载,require同步加载。也就是说如果你同时有多个包需要require,则他们需依次执行。
    3. import语法更紧凑/更具声明性,基本消除了 CommonJS 与AMD的裂痕(源自stackoverflow,参考一下就好,个人觉得掌握1.2点即可)
    4. import是静态加载,require是动态加载。(这里只是列出二者的区别,不去讨论动/静态加载的优缺点)
    5. import是 read-only

4. 补充区别: import 是强绑定,require是浅复制,仅仅是普通的值传递。

具体让我们看例子:

转载:https://blog.csdn.net/qq_31915745/article/details/107713759


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM