【vue】 面试题总结 -项目结构,版本比较,配置,优化

资源来自:https://developer.aliyun.com/ask/289308?spm=a2c6h.13066354.0.0.767533b5ZcyIwH

从0到1自己构架一个vue项目,说说有哪些步骤、哪些重要插件、目录结构你会怎么组织

vue-cli实际上已经很成熟了,目录除了脚手架默认的,
vue-cli详细教程:https://www.cnblogs.com/fengzhenxiong/p/10213198.html
1、一般会额外创建views,components,api,utils,stores等;
2、下载重要插件,比如axios,dayjs(moment太大),其他的会根据项目需求补充;
安装axios: https://www.jianshu.com/p/dacbefd62e29
安装dayjs: https://www.cnblogs.com/cjrfan/p/9154539.html
3、封装axios,统一api调用风格和基本配置;
4、如果有国际化需求,配置国际化; 配置国际化参考:https://blog.csdn.net/eieiei438/article/details/94735872
5、开发,测试和正式环境配置,一般不同环境API接口基础路径会不一样;

你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解

Vue使用了Mustache语法,即双大括号的语法。
模板引擎: 负责组装数据,以另外一种形式或外观展现数据。
优点:
可维护性(后期改起来方便);
可扩展性(想要增加功能,增加需求方便);
开发效率提高(程序逻辑组织更好,调试方便);
看起来舒服(不容易写错)

你有使用过vue开发多语言项目吗?说说你的做法

多语言适配(i18n)与使用哪种前端框架无关。
本质上是维护一个 map,然后通过一个中间层返回当前语种的显示内容。
这个 map 可以存储在 DB,通过 HTTP 接口获取;
也可以硬编码在 javascript 文件中,通过某个公共的 translate 方法获取;
当前语种可以由用户选择存储在本地;
也可以由 WebServer 通过判断客户端 IP 地址来识别使用哪种语种;
https://www.cnblogs.com/rogerwu/p/7744476.html

怎么解决vue打包后静态资源图片失效的问题?

1、确定线上环境是否在根路径上,配置资源根目录,vue-cli2 和 vue-cli3 字段不一致(assetsPublicPath 和 publicPath ),如果项目是根路径上,用’/’,’./‘都行,如果是在’/hc’这个路径上,用’./’ 相对路径(需history模式),也可以用’/hc/’。 在’/hc’路径上,如果需要本地和线上保持一致,可以用环境做判断设置不同的publicPath值。
2、确定静态文件放置的位置。
①、如果放在public/static,不经过webpack打包, 放在public 又分使用绝对路径和相对路径。
②、如果放在assets, 经过webpack打包, 使用的是相对路径
3、路径是否是动态的,如果是动态,需要用require() 引入。

使用vue后怎么针对搜索引擎做SEO优化?

ssr,即单页面后台渲染 参考:https://zhuanlan.zhihu.com/p/22361137
vue-meta-info 与prerender-spa-plugin 预渲染
vue-meta-info 参考:https://blog.csdn.net/weixin_43753330/article/details/106419950
prerender-spa-plugin 参考:https://www.cnblogs.com/you-uncle/p/13037300.html
nuxt 参考:https://zh.nuxtjs.org/
phantomjs 参考:https://www.jianshu.com/p/8210a17bcdb8

你知道vue2.0兼容IE哪个版本以上吗?

不支持ie8及以下,部分兼容ie9 ,完全兼容10以上
是因为vue的响应式原理是基于es5的Object.defineProperty的,而这个方法不支持ie8及以下
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

你是从vue哪个版本开始用的?你知道1.x和2.x有什么区别吗?

vue1.0的数据绑定完全依赖于数据侦测,使用Object.defineProperty方法使数据去通知相应watch,改变dom结构。vue2.0引入了虚拟dom,只通知到组件,提升了颗粒度。

你有看过vue推荐的风格指南吗?列举出你知道的几条

1、使用v-for时记得加key,可以快速定位到需要更新的DOM节点,提高效率
2、永远不要把 v-if 和 v-for 同时用在同一个元素上。提高渲染效率
3、优先通过 Vuex 管理全局状态,而不是通过 this.$root 或一个全局事件总线
https://cn.vuejs.org/v2/style-guide/

vue渲染模板时怎么保留模板中的HTML注释呢?

设置comments属性,官网默认为舍弃注释