获得徽章 0
#挑战每日一条沸点# Monorepo
Monorepo是把多个项目放在一个仓库里,相对立的是MultiRepo 模式,即每个项目对应一个单独的仓库来分散管理。
Vue 3、Yarn、Npm7 等知名开源项目的源码采用的是 Monorepo 方式进行管理。
Monorepo 给现代的前端工程带来的收益:
1.工作流的一致性。由于所有的项目放在一个仓库当中,复用方便。如果有依赖的代码变动,那么用到这个依赖的项目当中会立马感知到。并且所有的项目都是使用最新的代码,不会产生其它项目版本更新不及时的情况。
2.项目基建成本的降低,所有项目复用一套标准的工具和规范,无需切换开发环境,如果有新的项目接入,也可以直接复用已有的基建流程,只需要少量人来维护所有项目的基建。
3.方便团队协作。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# 包管理器——pnpm
pnpm 就是一个包管理器,和 npm/yarn 一样,但它的优势在于:
1.包安装速度极快,比 npm/yarn 快 2-3 倍;
2.磁盘空间利用非常高效。pnpm 内部使用基于内容寻址的文件系统来存储磁盘上所有的文件,不会重复安装同一个包。若安装一个包的不同版本,pnpm 会极大程度地复用之前版本的代码。
3.支持 monorepo。
4.pnpm安全性高,可规避非法访问依赖的风险。
安装:npm i -g pnpm

详见:juejin.cn
展开
评论
#挑战每日一条沸点# docx、pdf在线预览
1.docx
docx-preview插件
2.pdf
PDFJS插件,将文件流解析到canvas上实现预览。

完整实现:juejin.cn
展开
评论
#挑战每日一条沸点# JS实现图片预览
思路:
1.实现图片预览/查看的关键点在于 CSS3 中的 transform 变换,该属性应用于元素在2D或3D上的旋转,缩放,移动,倾斜等等变换,通过设置 translate(x,y) 即可偏移元素位置,设置scale可缩放元素,也可以设置 matrix 来完成上述所有操作,但这涉及到矩阵变换的知识。
2.通过指针事件来进行多端统一的事件监听。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# package.json配置——第三方配置
1.types / typings
指定 TypeScript 的类型定义的入口文件。
2.unpkg
可让 npm 上所有的文件都开启 CDN 服务。
3.jsdelivr
与 unpkg 类似。
4.browserslist
设置项目的浏览器兼容情况。babel 和 autoprefixer 等工具会使用该配置对代码进行转换,也可以用 .browserslistrc 单文件配置。
5.sideEffects
显示设置某些模块具有副作用,用于 webpack 的 tree-shaking 优化。
6.lint-staged
用于对 git 的暂存区的文件进行操作的工具,通常配合 husky 这样的 git-hooks 工具一起使用。


整理自:juejin.cn
展开
评论
#挑战每日一条沸点# package.json配置——系统配置
和项目关联的系统配置,如 node 版本或操作系统兼容性。这些要求只会提示警告,即使用户的环境不符合要求,也不影响安装依赖包。
1.engines
一些项目由于兼容性问题会对 node 或者包管理器有特定的版本号要求。
2.os
在 linux 上能正常运行的项目可能在 windows 上会出现异常,使用 os 字段可以指定项目对操作系统的兼容性要求。
3.cpu
指定项目只能在特定的 CPU 体系上运行。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# package.json配置——发布配置
1.private
如果是私有项目,不希望发布到公共 npm 仓库上,可将 private 设为 true。
2.publishConfig
publishConfig 即 npm 包发布时使用的配置。比如在安装依赖时指定了 registry 为 taobao 镜像源,但发布时希望在公网发布,就可以指定 publishConfig.registry。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# package.json配置——依赖配置
1.dependencies
运行依赖,即项目生产环境下需要用到的依赖。
使用 npm install xxx 或则 npm install xxx --save 时,会被自动插入到该字段中。
2.devDependencies
开发依赖,项目开发环境需要用到而运行时不需要的依赖,用于辅助开发。
使用 npm install xxx -D 或者 npm install xxx --save-dev 时,会被自动插入到该字段中。
3.peerDependencies
同伴依赖,不会被自动安装,常用于表示与另一个包的依赖与兼容性关系来警示使用者。
4.optionalDependencies
可选依赖,它不会阻塞主功能的使用,安装或者引入失败也无妨。这类依赖即使安装失败,npm的整个安装过程也是成功的。
使用 npm install xxx -O 或者 npm install xxx --save-optional 时会被自动插入到该字段中。
5.peerDependenciesMeta
同伴依赖也可用 peerDependenciesMeta 将其指定为可选。
6.bundleDependencies
打包依赖。其值是一个数组,在发布包时,bundleDependencies 里面的依赖都会被一起打包。
7.overrides
可以重写项目依赖的依赖,及其依赖树下某个依赖的版本号,进行包的替换。支持任意深度的嵌套。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# package.json配置——脚本配置
1.scripts
指定项目的一些内置脚本命令,这些命令可以通过 npm run 来执行。通常包含项目开发、构建等 CI 命令。可以使用命令 npm run build / yarn build 来执行项目构建,此外还可以配合 pre 和 post 完成命令的前置和后续操作。
2.config
用于设置 scripts 里的脚本在运行时的参数。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# package.json配置——文件配置
1.files
项目在进行 npm 发布时,可以通过 files 指定需要跟随一起发布的内容来控制 npm 包的大小,避免安装时间太长。发布时默认包括 package.json,license,README 和main 字段里指定的文件。忽略 node_modules,lockfile 等文件。
2.type
在 node 支持 ES 模块后,要求 ES 模块采用 .mjs 后缀文件名。如果不想修改文件后缀,可以在 package.json文件中指定 type 字段为 module。
3.main
项目发布时,默认会包括 package.json,license,README 和main 字段里指定的文件。如果不设置 main 字段,那么入口文件就是根目录下的 index.js。
4.browser
main 字段里指定的入口文件在 browser 和 Node 环境中都可以使用。如果只想在 web 端使用,可以通过 browser 字段指定入口。
5.exports
node 在 14.13 支持在 package.json 里定义 exports 字段,拥有了条件导出的功能。exports 字段可以配置不同环境对应的模块入口文件,并且当它存在时优先级最高。
6.workspaces
项目的工作区配置,用于在本地的根目录下管理多个子项目。可以自动地在 npm install 时将 workspaces 下面的包软链到根目录的 node_modules 中,不用手动执行 npm link 操作。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# package.json 配置——描述配置
主要是项目的基本信息,包括名称(name),版本(version),项目仓库地址及版本控制信息(repository),描述(description),关键词(keywords),主页(homepage),bug反馈地址(bugs),开源许可证(license),作者(author)等,部分会展示在 npm 官网上。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# CSS避免重复提交思路
禁用事件,pointer-events;
时间限制及状态恢复,animation;
触发时机,伪类:active。

CSS 实现“节流”其实就是实现一个动画的精准控制,假设有一个动画控制按钮从禁用->可点击的变化,每次点击时让这个动画重新执行一遍,在执行的过程中一直处于禁用状态,以达到“节流”效果。此外,还可以通过 transition 的回调函数动态设置按钮禁用态。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# 借助CSS监听事件——定时器
1.hover延时触发
给需要触发的元素加一个有延时的transition,然后添加监听transitionend方法。
2.长按触发事件
利用:active,然后监听transitionend方法。
3.轮播和暂停
将CSS动画设置次数为infinite就能无限循环,还可以直接通过:hover暂停和播放动画。可用animationiteration方法监听每次动画的触发,表示每个动画轮回就触发一次。

整理自:juejin.cn
展开
评论
#挑战每日一条沸点# Vite项目屏幕适配
1.基于rem
rem是指相对于根元素的字体大小的单位,适用于不固定宽高比的Web应用。
2.基于scale
在CSS3中可以使用transform属性的scale()方法来实现元素的缩放效果,适用于固定宽高比的Web应用。

整理自:juejin.cn
展开
评论
下一页
个人成就
文章被阅读 448
掘力值 51
收藏集
0
关注标签
6
加入于