搭建基础库~

前言

项目中会用到工具库、函数库以及一些跟框架绑定的组件,如果这些基础模块每个项目都实现一套,维护起来那真的头大,你说呢😉

搭建流程

准备工作

创建文件夹myLib、安装Git以及pnpm

目录大概就系这样子:

myLib
├── .husky
│   ├── commit-msg
│   └── pre-commit
├── packages
│   └── utils
│       ├── lib
│       │   ├── index.cjs.js
│       │   ├── index.esm.js
│       │   └── index.d.ts
│       ├── src
│       │   └── index.ts
│       ├── rollup.config.js
│       ├── tsconfig.json
│       └── package.json
├── .eslintrc.js
├── .prettierrc
├── commitlint.config.js
├── pnpm-workspace.yaml
├── tsconfig.json
└── package.json

配置Typescript

pnpm add -D -w typescript tslib
pnpm tsc --init

tsconfig.json

{
    "files": [],
    "references": [
      { "path": "./packages/utils" }
    ]
  }

 pnpm-workspace.yaml

packages:
  - 'packages/*'

package.json

  "scripts": {
    "postinstall": "husky install",
    "lint": "eslint packages/**/*.{ts,js} --fix"
  }

子包

tsconfig.json配置 

{
  "compilerOptions": {
    "rootDir": "./src",
    "declaration": true,
    "declarationDir": "./lib",
    "emitDeclarationOnly": true,
    "module": "esnext",
    "target": "es6",
    "moduleResolution": "node",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*"]
}

Rollup打包

pnpm add -D rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs @rollup/plugin-typescript typescript

rollup.config.js

import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from '@rollup/plugin-typescript';

export default {
  input: "src/index.ts",
  output: [
{
    file:"lib/index.cjs.js",
    format:"cjs",
},
{
    file:"lib/index.esm.js",
    format:"esm",
},
  ],
  plugins:[
    resolve(),
    commonjs(),
    typescript()
  ]
};

package.json

  "scripts": {
    "build": "rollup -c"
  } 

git commit 验证

记得用git先初始化下仓库

pnpm add -D -w husky @commitlint/{config-conventional,cli}
pnpm husky install

pnpm dlx husky-init --pm=pnpm

npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

commitlint.config.js

module.exports = {
  extends: ['@commitlint/config-conventional']
}; 

配置Eslint和Prettier

 pnpm add -D -w eslint prettier eslint-config-prettier eslint-plugin-prettier

eslint.config.js

const path = require('path');
const { ESLint } = require('eslint');
const tsParser = require('@typescript-eslint/parser');
const tsPlugin = require('@typescript-eslint/eslint-plugin');
const prettierPlugin = require('eslint-plugin-prettier');

module.exports = [
  {
    files: ['packages/**/src/**/*.{ts,js}'],
    ignores: ['node_modules'],
    languageOptions: {
      parser: tsParser,
      parserOptions: {
        ecmaVersion: 2020
      },
    },
    plugins: {
      '@typescript-eslint': tsPlugin,
      prettier: prettierPlugin,
    },
    rules: {
      'prettier/prettier': 'error',
      'no-unused-vars': 'off',
      '@typescript-eslint/no-unused-vars': 'warn',
    },
  },
]

.prettierrc

{
    "singleQuote": true,
    "trailingComma": "all",
    "printWidth": 80
  } 

.husky/pre-commit

pnpm run lint 

打包

最后

整体的框框已经搭建起来,把需要的工具、函数和组件写入即可,发布子包到私有仓库即可内部使用啦~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

你真的会信息收集嘛,4k字渗透测试信息收集10大技巧

前言 在渗透测试中,信息收集是非常关键的一步,它为后续的漏洞发现和利用提供了重要的基础。以下是非常详细的信息收集方式: 一、被动信息收集 被动信息收集是指在不与目标系统直接交互的情况下,通过公开渠道获取目标系统的相关…

LabVIEW在半导体自动化测试中的应用

半导体制造的复杂性和精密度要求极高,每一个生产步骤都需要严格的控制和监测。自动化测试设备在半导体制造中起到了关键作用,通过精密测量和数据分析,确保产品质量和生产效率。本文介绍如何使用LabVIEW结合研华硬件,开发一个用于半…

Nacos注册中心相关错误记录

文章目录 1,com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:jar:unknown was not found1.1 定位及解决方案1.2,简要说明dependencyManagement的作用 2,nacos启动失败2.1 解决方案 1,com.alibaba.cloud:spring-c…

白嫖A100活动来啦,书生·浦语大模型全链路开源体系

扫码参加即可获得: 第一节 书生浦语大模型全链路开源体系 书生浦语大模型的开源历程。 从模型到应用的典型流程 书生浦语的开源体系,包含从数据、预训练、微调、部署、评测、应用等环节

无线领夹麦克风品牌排名,揭秘国产领夹麦克风哪个品牌好

在自媒体行业迅猛发展的浪潮中,领夹麦克风作为音频采集的关键设备,其市场需求正经历着前所未有的激增。面对市场上众多品牌和型号的选择,如何做出既符合个人需求又不失专业水准的决策,成为了消费者亟待解决的问题。 我特意为大家…

逻辑回归中的损失函数

一、损失函数介绍: 与回归问题成本函数不同的是,逻辑回归模型(解决分类问题)的成本函数在获得损失J的时候不再用真实值y与预测值y^的差值计算损失,真实值y不再出现在公式中作为计算项。 首先,该次训练损失…

Gradle基础:从入门到掌握

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 在现代软件开发中,自动化构建工具是提高效率和管理依赖的重要手段。而Gradle作为一种灵活且强大的构…

中国各省金融监管水平-测算数据(2006-2022年)

金融监管水平是指政府及其指定机构通过法律法规对金融机构及其市场行为进行监督、管理与规范的能力和效率,以维护金融体系稳定、保护投资者和消费者权益、促进公平竞争及支持经济增长。衡量金融监管水平的指标多样,常见的一种计算方式是金融监管支出与金…

linux指令练习

二、touch、vi练习: 1、在root家目录下创建目录A1和B1 2、进入B1下同时创建三个文件m1, m2 , n1,单独创建目录N1 3、进入到A1目录中分别创建一个文件t1,k2,同时创建目录F1,F2 4、删除B1下的所有1结尾的文件或者目录 5、删除A1目录…

容易涨粉的视频素材在哪找啊?爆款涨粉的视频素材网站有这几个

亲爱的读者,大家好!今天我们要探讨一个至关重要的问题:在充满竞争的视觉时代,如何使自己的短视频脱颖而出并吸引更多粉丝?关键在于使用那些既酷炫又高质量的视频素材!下面就向大家推荐几个顶级视频素材网站…

【分布式系统】Filebeat+Kafka+ELK 的服务部署

目录 一.实验准备 二.配置部署 Filebeat 三.配置Logstash 四.验证 一.实验准备 结合之前的博客中的实验 主机名ip地址主要软件es01192.168.80.101ElasticSearches02192.168.80.102ElasticSearches03192.168.80.103ElasticSearch、Kibananginx01192.168.80.104nginx、Logs…

vue对axios进行请求响应封装

一、原因 像是在一些业务逻辑上,比如需要在请求之前展示loading效果,或者在登录的时候判断身份信息(token)等信息有没有过期,再者根据服务器响应回来的code码进行相应的提示信息。等等在请求之前,之后做的一…

前端面试题23(css3)

关于CSS3的面试题,我们可以从多个维度来探讨,包括但不限于选择器、盒模型、布局技术、动画与过渡、响应式设计等。下面我会列举一些典型的CSS3面试问题,并尽可能提供详细的解答或示例代码。 1. CSS3中新增了哪些选择器? 答案: C…

Spring Boot集成rmi快速入门demo

1.什么是rmi? RMI(Remote Method Invocation)即远程方法调用,是分布式编程中的一个基本思想。实现远程方法调用的技术有很多,比如CORBA、WebService,这两种都是独立于各个编程语言的。 而Java RMI是专为Ja…

DNF手游攻略:云手机辅助刷副本!内置辅助工具!

DNF手游是一款备受玩家喜爱的角色扮演类游戏,以其独特的地下城探险和多样化的装备系统而闻名。玩家需要通过不断的挑战和升级,逐步增强自己的角色实力,最终完成各种高难度的副本任务。游戏的核心玩法包括打怪、刷装备、升级技能等。 游戏辅助…

python特征相关性可视化分析 - sns.pairplot

seaborn 是一个基于 matplotlib 的 Python 数据可视化库,提供了更高层次的接口来绘制有吸引力的统计图形。pairplot 是 seaborn 中的一个函数,用于绘制数据集中多个变量之间的成对关系图。 基本用法 pairplot 函数可以快速地对数据集中的所有数值变量进…

如何优化 PostgreSQL 中对于树形结构数据的查询?

文章目录 一、数据模型选择(一)邻接表模型(二)路径枚举模型(三)嵌套集模型 二、索引策略(一)对于邻接表模型(二)对于路径枚举模型(三)…

信息技术课堂纪律管理:从混乱到秩序的智慧转型

引言: 在信息爆炸的时代,信息技术课程如同一把开启未来世界大门的钥匙,为学生们搭建起探索科技奥秘的桥梁。然而,面对着屏幕背后的无限诱惑,维持课堂纪律,确保学生们专注于学习,成为了每位信息…

[C++]入门基础(1)

Hello大家好,今天通过本篇文章,我们来初步学习C,C可以说是对C语言的一个升级,我们会一步一步的由浅入深的学习C。 目录 1.第一个C程序 2.命名空间 2.1 命名空间出现的意义 2.2 namespace的定义 2.3 命名空间的使用 3.C输入…

【Java系列】深入解析 Lambda表达式

简化这个代码 这个就是Lambda表达式,可以简化匿名内部类的写法 package lambda;public class demo2 {public static void main(String[] args) {//第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象--接口多态// 但是这个实现类,我只要用一次,所以我…