前端架构: 调试与发布本地脚手架最佳实践梳理

脚手架本地调试标准流程


1 )链接本地脚手架

  • 就是当我们这个脚手架开发好还没上线的时候
  • 可以进入到脚手架的一个目录, 通过 npm link 完成这个操作
  • $ cd your-cli-dir
  • $ npm link
  • 这个操作的含义是将当前的项目链接到node全局的 node_modules 中作为一个库文件, 并且还会解析我们的bin配置, 去配置可执行文件
  • 通过 npm link 的时候, 它就会在当前 node 全局的依赖当中创建一个脚手架可执行文件并且指向自己本地脚手架项目配置的这个文件

2 )链接本地库文件

  • 首先来到当前的库文件,下面执行 npm link, 这时候得到一个全局的库文件名称
    • 在全局node_modules中会有一个软链指向当前库文件项目目录
    • 这个软链名称就是 库文件名称
    • $ cd your-lib-dir
    • $ npm link
    • 此时,当前的库文件就可在全局找到了,但是这个库在当前cli项目中并未存在
  • 然后来到脚手架cli目录执行 npm link 库文件名称
    • $ cd your-cli-dir
    • $ npm link your-lib
  • 这时,在当前项目内的 node_modules 当中创建一个 库文件的软链 指向全局 node_modules
  • 而我们知道,全局的 库文件 也是一个软链,指向本地正在开发调试的库文件项目
  • 这时候,两者就能串联起来了,注意,不要忘记在当前cli脚手架项目的依赖中,添加当前库文件的依赖和版本
  • 这时候,两者可以随时联动起来,随时修改,随时可以同步了

3 )取消链接本地库文件

  • 当需要模拟真实环境,也就是将要上线的时候,需要把本地的软链接全部解除
  • 首先,仍然是需要来到库文件的这个目录,执行 npm unlink
    • $ cd your-lib-dir
    • $ npm unlink
  • 这时,它会将当前这个项目从node的全局 node_modules 中移除, 这时候库文件的软链就不见了
  • 不存在意味着,我们的cli脚手架将无法使用这个库,再次执行脚手架cli命令将必然会因为找不到依赖而报错
  • 进入到我们的脚手架cli项目中,对已经失效的库文件同步进行解除链接
    • $ cd your-cli-dir
    • $ npm unlink your-lib
    • 这时候,仍旧会报错,因为先把库文件的软链从全局node_modules中取消了,所以这里因为找不到而报错
    • 这个报错可以忽略,执行后虽然报错了,但是将本地cli脚手架对于库文件的软链删除了
    • 其实,如果不想要这个报错,可以先执行取消本地cli对库文件的软链,再取消本地库文件在全局的软链
    • 也即是调整下两者执行的顺序,其实这个报错是可以忽略的,是无所谓的
    • 如果先在cli项目中unlink 库文件,则会发现,在cli项目的依赖配置中, 库文件的依赖也同步会删除
    • 如果配置文件中的依赖被这样删除了,后期还需要 npm i 库文件 -S 或者手动重新配置(这个就会修改源码了)
    • 所以,仍推荐保持目前这个顺序,主动让其在 unlink 时报错,免得后期遗漏或重新安装的麻烦
  • 如果这时候库文件已经发布上线了,可以
    • 先删除脚手架cli目录中的node_modules, 即 $ rm -rf node_modules
    • 之后,执行 npm i 重新安装
  • 通过这个标准流程可以顺利实现脚手架的调试与上线

link 和 unlink 的总结


1 ) npm link

  • npm link your-lib:将当前项目中 node modules 下指定的库文件链接到 node 全局 node_modules 下的库文件
  • npm link:将当前项目链接到 node全局 node modules 中作为一个库文件,并解析 bin配置创建可执行文件

2 )npm unlink

  • npm unlink: 将当前项目从 node 全 node_modules 中移除
  • npm unlink your-lib: 将当前项目中的库文件依赖移除

发布

  • 这里发布流程单独拿出来说
  • 按照上面的依赖关系,有两个本地项目,要先发布 本地库 项目

1 )发布本地库项目

  • 进入到本地库项目,还是先解除 本地库项目的 软链
    • $ cd your-lib-dir
    • $ npm unlink
  • 升级 本地库项目 的版本
    • 修改 package.json 中的 version 配置,升级版本号
    • 注意,如果之前已经发布过,不升级版本号,则会导致发布失败
  • 发布: $ npm publish 假设已经执行 npm login 了

2 ) 本地库项目发布成功后,还需要发布本地脚手架项目

  • 首先,本地脚手架项目也是在调试状态中,要按照上面的流程与本地库项目进行unlink
  • 同时,也要与自身(全局软链)进行 unlink
  • 这些都做好之后,在发布之前,需要修改本地脚手架项目的package.json文件中dependencies配置中的库项目的版本
    • 这个库项目版本要保持和已发布的线上版本相同
  • 以上都做完之后,在本地的脚手架项目中的package.json中,升级项目自身的版本号
  • 执行发布:$ npm publish

3 )验证发布结果

  • 安装发布后的版本 $ npm i -g your-cli
  • 执行脚手架命令,验证新的 feature

参考

  • https://blog.csdn.net/Tyro_java/article/details/136103930

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

希捷与索尼集团合作生产HAMR写头激光二极管

最近有报道指出,希捷(Seagate)在生产其采用热辅助磁记录(HAMR)技术的大容量硬盘时,并非所有组件都在内部制造。根据日经新闻的一份新报告,希捷已与索尼集团合作,由索尼为其HAMR写头生…

重塑高校评价体系,缓解内卷,培养有远见的研究者

重塑高校评价体系,缓解内卷,培养有远见的研究者 摘要:当前高等教育和科研环境中普遍存在的“非升即走”制度,尽管表面上看似激励科研人员努力工作,但实际上反映了学术界的内卷状况。这一制度的设置在人才供过于求的背景…

实验二 物理内存管理-实验部分

目录 一、知识点 1、计算机体系结构/内存层次 1.1、计算机体系结构 1.2、地址空间&地址生成 1.3、伙伴系统(Buddy System) 2、非连续内存分配 2.1、段式存储 2.2、页式存储 2.3、快表和多级页表 2.4、段页式存储 3、X86的特权级与MMU 3.…

FPGA中的模块调用与例化

目录 一、模块调用与实例化 1.1 模块调用 1.2 模块实例化 1.3 Verilog例化语句及其用法 1.3.1 例化语句的基本格式 1.3.2 实例化三种不同的连接方法 二、模块调用实例-全加器与半加器 2.1 半加器模块 2.2 全加器模块 三、参数定义关键词与整数型寄存器 3.1 参数定义关…

乡政府|乡政府管理系统|基于Springboot的乡政府管理系统设计与实现(源码+数据库+文档)

乡政府管理系统目录 目录 基于Springboot的乡政府管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、活动信息管理 3、新闻类型管理 4、新闻动态管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推…

视觉设计师的项目评审复盘攻略:如何提升设计质量与效率

视觉设计师的角色是至关重要的,以确保设计项目满足预期的质量和结果。作为一名视觉设计师,有必要进行定期的项目审查,以确保项目在正轨上进行,并尽早解决任何问题。在本文中我们将讨论可视化设计人员如何做好项目评审,…

ascii码,unicode编码集和utf编码方式

ASCII码 ASCII码使用7位二进制数表示一个字符,共定义了128个字符,包括基本的拉丁字母、数字、标点符号和一些控制字符。每个字符都被赋予一个唯一的数值,这个数值在0到127之间。 Unicode编码集 Unicode是一个字符编码标准,它为…

吴恩达机器学习全课程笔记第一篇

目录 前言 P1 - P8 监督学习 ​无监督学习 P9-P14 线性回归模型 成本(代价)函数 P15-P20 梯度下降 P21-P24 多类特征 向量化 多元线性回归的梯度下降 P25-P30 特征缩放 检查梯度下降是否收敛 学习率的选择 特征工程 多项式回归 前言…

【沐风老师】3DMAX一键书籍生成插件BookMaker使用方法详解

3DMAX书籍制作者插件BookMaker使用方法 3DMAX一键书籍生成插件BookMaker,是用于在3dMax中创建书籍的插件,可以创建高细节的3D书籍模型,具有不同的书籍类型可以选择。 【适用版本】 3dMax2012 – 2024(不仅限于此范围)…

问题记录——c++ sort 函数 和 严格弱序比较

引出 看下面这段cmp函数的定义 //按照vector第一个元素升序排序 static bool cmp(const vector<int>& a, const vector<int>& b){return a[0] < b[0]; }int eraseOverlapIntervals(vector<vector<int>>& intervals) {//按区间左端排序…

RK3399平台开发系列讲解(USB篇)USB 枚举和断开过程

🚀返回专栏总目录 文章目录 一、连接与检测二、USB设备枚举三、断开过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢介绍 USB 枚举/断开过程。 一、连接与检测 二、USB设备枚举 USB设备枚举一

Linux:docker的Portainer部署

官网 Portainer: Container Management Software for Kubernetes and Dockerhttps://www.portainer.io/ 1.下载 portainer也是一个docker的镜像直接下载即可 docker pull portainer/portainer 2.运行 直接运行镜像即可直接使用 docker run -d -p 8000:8000 -p 9000:9000 -…

VitePress-17- 配置- appearance 的作用详解

作用说明 appearance : 是进行主题模式的配置开关&#xff0c;决定了是否启用深色模式。 可选的配置值&#xff1a; true: 默认配置&#xff0c;可以切换为深色模式&#xff1b; false: 禁用主题切换&#xff0c;只使用默认的配置&#xff1b; dark: 默认使用深色模式&#xff…

《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术(6)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第13章 PCI总线与虚拟化技术&#xff08;5&#xff09; 13.2 ATS&#xff08;Address Translation Services&#xff09; 单纯使用IOMMU并不能充分发挥处理器系统的效率&#xff0c;从图13-2中可以发现&…

TIM编码器接口(编码器测速)

定时器编码器接口自动计次--------->对应手册14.3.12编码器接口模式 应用场景&#xff1a; 电机控制PWM驱动电机&#xff0c;编码器测电机速度&#xff0c;PID算法闭环控制 ------------------------------------------------------------------------------------------…

C++入门学习(三十)一维数组的三种定义方式

数组是什么&#xff1f; 数组&#xff08;Array&#xff09;是有序的元素序列。 若将有限个类型相同的变量的集合命名&#xff0c;那么这个名称为数组名。组成数组的各个变量称为数组的分量&#xff0c;也称为数组的元素&#xff0c;有时也称为下标变量。用于区分数组的各个元素…

Nuxt3+Vue3(Composition API)+TS+Vite+Ant Design Vue 搭建

最近官网搭建选择了nuxtjs&#xff0c;由于框架更新了&#xff0c;其中语法也有很多变化&#xff0c;中间遇到了一些问题点做下总结。 nuxt3官方文档地址&#xff1a;https://nuxt.com/docs/getting-started/installation 安装 在安装Nuxt3之前&#xff0c;你需要保证你的nod…

第四次作业:XTuner InternLM-Chat 个人小助手认知微调实践

参考文档&#xff1a; https://github.com/InternLM/tutorial/blob/main/xtuner/README.md https://github.com/InternLM/tutorial/blob/main/xtuner/self.md 数据准备&#xff1a; 配置文件&#xff1a; # Copyright (c) OpenMMLab. All rights reserved. import torch fr…

方法和概念

什么是方法&#xff1f;什么是概念&#xff1f; 计算机术语 方法是为了达成某个目标所用的方式和办法。方式就是选择的途径&#xff0c;办法就是采取的措施。 关键性理解&#xff1a; 选择的途径&#xff0c;途径的名称就是方法的名称&#xff0c;途径的主体就是方法的主体&am…

安装 SEED-XDS560v2 Driver.exe

安装 SEED-XDS560v2 Driver.exe References CCS 5.5.0.00077 安装目录 D:\ti\ccsv5\ SEED-XDS560v2 Driver.exe 安装目录 D:\ti\ccsv5\ccs_base References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/