项目中遇到的问题与报错
大纲链接 §
[toc]
轮子 ⇧
初步完成的轮子
发布组件库时的 main
路径错误 ⇧
package.json
错误的路径"./dist/lib/vueel3.js",
|
|
package.json
正确的路径"dist/lib/vueel3.js",
|
|
rollup.config.js
配置错误及运行rollup -c
错误 ⇧
- 不使用
rollup
打包 - 而直接使用
vite
的library-mode
库模式 vite.config.ts
代替原来的rollup.config.js
rollup.config.js
|
|
vite.config.ts
开启build lib
|
|
抽出
base
配制
|
|
vue-tsc && vite build
⇧
- 运行
yarn build
报错 - 实际运行
vue-tsc && vite build
- 直接运行
vite build
不报错 - TS代码编译不通过
throw 'emit mode is not yet support';
build 之后加载 .md 文件报错 ⇧
bug 重现
- 打包
yarn build
或者vite build
得到dist
目录下所有文件 - 使用
http server
运行服务hs dist -c-1
- 查看介绍文档,发现空白
解决方法
- 由于在路由中使用了动态加载
const md = filename => h(Markdown, {path: `../markdown/%{filename}.md`, key: filename})
- vite 打包时使用的是
rollup
rollup
不支持import()
时动态拼接字符串(只有当运行函数md
时,即md(intro)
,才能知道filename
是什么)rollup
只是做代码的静态分析,否则运行代价太大,得不偿失
- 解决方法是将运行时的动态改为静态加载
- 将拼接字符串
../markdown/%{filename}.md
改为事先引入模块 import intro from './markdown/intro.md'
import getStarted from './markdown/get-started.md'
import install from './markdown/install.md'
- 将拼接字符串
- 直接将引入的模块作为
md
函数的参数md(intro)
md(getStarted)
md(install)
- 并且修改
md
函数const md = mdString => h(Markdown, {content: mdString, key: mdString})
- 并且修改
Markdown.vue
组件
|
|
Prismajs 不显示代码行数 ⇧
https://prismjs.com/plugins/line-highlight/ | Line highlight ▲ Prism plugins https://prismjs.com/plugins/line-numbers/ | Line Numbers ▲ Prism plugins https://blog.xqopen.com/code-highlight-in-ghost/ | 几行代码就可以让你家Ghost支持代码高亮 https://juejin.cn/post/7023910122770399269?utm_source=gold_browser_extension | 尤雨溪推荐神器 ni ,能替代 npm/yarn/pnpm ?简单好用!源码揭秘! - 掘金 https://www.google.com/search?q=%22vue3%22+Prismjs+line+number&sa=X&ved=2ahUKEwi2zrbv2-zzAhXizDgGHTdyDgkQ5t4CegQIChAB&biw=867&bih=881&dpr=1 | “vue3” Prismjs line number - Google 搜索 https://morioh.com/p/ff92e45cadd6 | Highlight Code Using Prism.js and Vue Component https://blog.csdn.net/bigbear00007/article/details/109182369 | prism.js让页面代码变漂亮_HELLO WORLD-CSDN博客_prismjs https://www.cnblogs.com/pellime/p/9949843.html | prism.js——让网页中的代码更好看 - pellime - 博客园 https://www.jianshu.com/p/1619c91f73c2 | 代码美化JS–prismjs - 简书 https://www.cnblogs.com/geekgx/p/8134426.html | prism.js使页面代码变得漂亮 - GeekGx - 博客园 https://www.orchome.com/1374 | Prism.js介绍 - OrcHome https://hexingxing.cn/beautiful-code-highlighting-tool/ | PrismJS,一款漂亮的代码高亮工具 – 何星星
提问: ⇧
- 1.代码链接为 https://github.com/xmasuhai/vueel3-demo-1/tree/06d4fbb59ce8b40d1ddbc6c7e6e9312c792b3ec9
- 2.运行步骤为:
- 安装依赖
yarn install
; - 展示页面
yarn dev
;
- 安装依赖
- 3.复现步骤为:
- 进入http://localhost:3000/
- 点击开始按钮
- 点击 Switch组件
- 点击 查看代码 按钮
- 显示的代码没有行数显示
- 点击浏览器刷新按钮或F5 重新加载页面
- 点击 查看代码 按钮
- 显示的代码有行数显示
- 点击 Button 组件(切换了路由)
- 点击 查看代码 按钮
- 显示的代码没有行数显示
- 4.期待结果为:一进入任意组件或者切换组件对应的路由时,点击 查看代码,就可以显示代码行数
- 使用的是
Prismjs
的插件line-numbers
,估计出问题的文件为src/components/Demo.vue
里引用的import 'prismjs/plugins/line-numbers/prism-line-numbers.min.js';
,是一个立即执行函数
引入的样式没有生效或报错 ⇧
提示:假如script标签内的import ‘prismjs/themes/prism.css’没有生效或报错, 请尝试:单独建一个没有scoped的style标签,然后在其中引入,具体代码如下:
|
|
vite 插件 rollup 文档的 命名误导 id ⇧
- 处理自定义标签
<demo></demo>
- vite 1.x 迁移 自定义块转换
transform(code, id)
中的id
其实所解析到的文件的 url- 使用正则匹配
/vue&type=demo/.test(id)
- 去除多余的查询参数得到该文件路径
const path = id.replace(`?vue&type=demo&index=0&lang.demo`,'');
- 按路径读取文件内容
const fileString = fs.readFileSync(path).toString();
- 找出
<demo></demo>
标签节点,并且得到文本const parsed = baseParse(fileString).children.find(n => n.tag === 'demo');
const title = parsed.children[0].content;
- 得到代码主体
const main = fileString.split(parsed.loc.source).join('').trim();
- 给组件附加属性
Component.__sourceCode = ${JSON.stringify(main)}
Component.__sourceCodeTitle = ${JSON.stringify(title)}
- 在模板字符串中返回 方法
return `export default function (Component) { Component.__sourceCode = ${JSON.stringify(main)} Component.__sourceCodeTitle = ${JSON.stringify(title)} }`.trim();
解构出的 props
数据在 script setup
中失去数据响应性 ⇧
- 需要用
toRefs(props)
重新赋予其数据响应 - destructured prop visible is Value (integer for e.g.) which cannot be reactive by itself
- 解构出来的visible为简单类型,不再具有数据响应性
- 需要调用
toRefs(props)
赋予数据响应性 - Destructuring the props will cause the value to lose reactivity
参考
CSS @import
在webstorm
中报错 ⇧
https://juejin.cn/post/6974584590836957221 | vite 中动态引入图片路径 - 掘金 https://juejin.cn/post/6980141344131923999 | Vite 的好与坏 - 掘金 https://juejin.cn/post/6861501624993447950 | CSS八种让人眼前一亮的HOVER效果 - 掘金 https://juejin.cn/post/6918672538646102029 | Vue3+Ts+Vite购物车实战 - 掘金 https://juejin.cn/post/6976558626425028645 | 按需加载更优雅的解决方案——vite-plugin-components - 掘金 https://juejin.cn/post/6844904031513477128 | 请收下这72个炫酷的CSS技巧 - 掘金 https://juejin.cn/post/6926822933721513998 | 2021必知必会的vite+vue3项目最佳实践 - 掘金 https://juejin.cn/post/6984033527520051208 | 来一个vitepress版的博客主题吧(简约版) - 掘金 https://juejin.cn/post/6988704825450397709 | [Vite 总结] 帅小伙花了一个月时间总结的 Vite 知识点和迁移方案 - 掘金 https://juejin.cn/post/7009519892139507749 | vue2 配个vite,让开发速度翻倍⚡️ - 掘金
<component></component>
必须加上:key="currentTab"
属性 ⇧
显示被选中的内容,失败
- 官方不推荐
v-if
和v-for
一起使用 - 不循环渲染
<component></component>
,使用获取当前选中的标签传给<component :is="currentTab"></component>
- 使用计算属性,实时响应
currnetTab
的变化 <component :is="currentTab" :key="currentTab" class="vue-tabs-content-item"></component>
- 必须加上
:key="currentTab"
属性 component
传递相同类型的vnode
时,编译是竞态的,见 vuejs/vue-next issue#2013
- 必须加上
警告[Vue warn]: Extraneous non-props attributes (title) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.
⇧
- 使用了文本节点作为组件的根节点
解决hover影响移动端样式 ⇧
PC端原本hover样式是鼠标悬浮显示,不悬浮就消失的样式在移动端显示时,点击后才显示hover样式,此后如果不做处理,那么hover样式就一直存在
- 判断当前设备是什么设备
- 通过设备宽度来判断,用
@media screen and(...)
来设置移动端和pc的样式。 - 但这个来处理hover并不好,因为pc端网页窗口也能缩小到500px,移动端的窗口大小也是不定的
- 通过查阅媒体特性可知,
any-hover
是用来查看设备是否支持hover
事件的
|
|
使用
touchstart
在body上绑定一个空的touchstart事件
|
|
消除在移动端中浏览器自带的一个点击高亮效果,可以通过给a标签或者body,html加如下CSS代码:
|
|
使用 script setup
语法糖 无法获取context
⇧
- 官方文档不建议使用
getCurrentInstance
当作在组合式 API 中获取 this 的替代方案来使用 - 大部分情况下无需用到 context
...context.slots
...context.slots.default()
...context.slots.default()[0]
- Vue 直接暴露了其他接口,替代原来需要用
context.*
访问的接口,比如defineProps({})
defineEmits([])
defineExpose({})
useSlots()
useAttrs()
- 响应式属性、导入的方法和组件会被直接暴露给模板
:deep(selector)
代替Vue2.x
中SCSS
过时的写法 ⇧
Vue2.x
中写scss
的深入组件的选择器的写法::v-deep
在Vue3.x
中改为:deep(selector)
参考文章 ⇧
- 无
相关文章 ⇧
- 无
- 作者: Joel
- 文章链接:
- 版权声明
- 非自由转载-非商用-非衍生-保持署名