当前位置: 首页 > news >正文

华强北网站建设公司蛋糕烘焙wordpress主题

华强北网站建设公司,蛋糕烘焙wordpress主题,域名解析完成网站怎么做,设计工作室经营范围本篇文章是对 实现 Rollup 插件 alias | 使用 TypeScript 实现库的基本流程 | 使用单元测试提高开发效率 的总结。其中涉及到开发一个组件库的诸多知识点。 实现一个经常用的 rollup 插件 alias 首先执行npm init命令初始化一个package.json文件#xff0c;因为插件使用了ty…本篇文章是对 实现 Rollup 插件 alias | 使用 TypeScript 实现库的基本流程 | 使用单元测试提高开发效率 的总结。其中涉及到开发一个组件库的诸多知识点。 实现一个经常用的 rollup 插件 alias 首先执行npm init命令初始化一个package.json文件因为插件使用了typescript作为类型校验所以需要执行tsc --init命令去生成一个ts的配置文件tsconfig.json执行完上述的命令之后安装项目依赖。 pnpm i rollup typescript rollup/plugin-typescript tslib -D先简单实现一下这个插件插件要求导出一个方法并且返回一个对象 import { Plugin } from rollup export function alias(): Plugin {return {name: alias,resolveId(source: string, importer: string | undefined) {console.log(resolveId, source, importer)return source}} }接下来需要将index.ts编译成可执行的js文件新增一个rollup配置文件rollup.config.js指定输入以及输出 import { defineConfig } from rollup import typescript from rollup/plugin-typescriptexport default defineConfig({input: ./src/index.ts,output: {file: ./dist/index.js,format: es},plugins: [typescript({module:esnext})] })在package.json里面新增一条命令并执行pnpm build scripts: {build: rollup -c rollup.config.js},一般执行到这里会有一个CommonJS和ES module的类型冲突如图所示 我们只需要在package.json指定类型即可 type: module,再次运行pnpm build可以发现在dist目录下会生成打包完成之后的index.js文件。 当别人去安装你的包的时候需要所指定执行的文件在哪即修改package.json里面的main字段由main: index.js改为main: ./dist/index.js 使用开发的 alias 插件 新增一个example文件夹新增index.js、add.js写入相关的测试代码 import { add } from ./utils/add.js console.log(add(1, 2))export function add (a, b) {return a b; }在example里面执行初始化并且新增rollup配置文件rollup.config.js并且补充build命令具体操作和上文类似 import { defineConfig } from rollup export default defineConfig({input: index.js,output: {file: ./dist/index.js,format: es} })通过在example目录下执行如下命令就可以使用我们开发的插件 // ../上层目录 pnpm i ../ -D执行完之后会新增如下代码 devDependencies: {rollup: ^3.26.2,rollup-alias: link:.. // 新增的依赖 }在example/rollup.config.js里面引入我们编写的 alias 插件完整的代码如下 import { defineConfig } from rollup import { alias} from rollup-aliasexport default defineConfig({input: index.js,output: {file: ./dist/index.js,format: es},plugins: [alias()] })在此执行pnpm build可以发现已经成功的打印出了log 为插件添加TS类型提示 首先补充插件的参数类型提示并且完善一下插件逻辑 import { Plugin } from rollup interface AliasOptions {entries: { [key: string]: string } }export function alias(options: AliasOptions): Plugin {const { entries } optionsreturn {name: alias,resolveId(source: string, importer: string | undefined) {console.log(resolveId, source, importer)const key Object.keys(entries).find((e) {return source.startsWith(e)})if (!key) return sourcereturn source.replace(key, entries[key]) .js}} }执行build之后在我们会发给 alias 传参的时候并没有对应的参数类型提示 这里需要在tsconfig.json文件中开启 declaration: true 功能以及设置outDir: ./dist 在package.json里面添加types: ./dist/index.d.ts,执行完上述操作之后再次执行 pnpm build 补充单元测试 安装vitest补充单元测试文件index.spec.ts添加测试命令 pnpm i vitest -D// index.spec.ts import { describe, it, expect } from vitest import { alias } from .describe(alias, () {it(should replace when match successful, () {const aliasObj:any alias({entries: {: ./utils}})expect(aliasObj.resolveId(/add)).toBe(./utils/add.js)})it(should not replace when match fail, () {const aliasObj: any alias({entries: {: ./utils}})expect(aliasObj.resolveId(!/add)).toBe(!/add)}) })scripts: {test: vitest},我们需要在 build 的时候排除掉我们的测试文件可以在 tsconfig.json 补充如下代码 exclude: [./src/*.spec.ts] 然后执行pnpm test 可以看到这里的测试用例是通过的也可以证明我们写的代码是没问题的。 entries 支持数组格式 这里直接贴完成之后的代码 import { Plugin } from rollupinterface AliasOptions {entries: { [key: string]: string } | { find: string, replacement: string }[] }export function alias(options: AliasOptions): Plugin {const entries normalizeEntries(options.entries)return {name: alias,resolveId(source: string, importer: string | undefined) {console.log(resolveId, source, importer)const entry entries.find((e) e.match(source))if (!entry) return sourcereturn entry.replace(source)}} }function normalizeEntries(entries: AliasOptions[entries]) {if (Array.isArray(entries)) {return entries.map(({ find, replacement }) {return new Entry(find, replacement)})} else {return Object.keys(entries).map((key) {return new Entry(key, entries[key])})} }class Entry {constructor(private find: string, private replacement: string) { }match(filePath: string) {return filePath.startsWith(this.find)}replace(filePath: string) {return filePath.replace(this.find, this.replacement)} }以上就简单的实现了一个rollup插件开发的大致流程
http://www.pierceye.com/news/423136/

相关文章:

  • 58同城做网站怎么做南京ui培训
  • 小说网站开发的目的网站建设力洋
  • php做的网站模板wordpress破解
  • 建网站需要买些什么wordpress 时间轴微语
  • 网站建设要学什么什么网站可以做项目
  • 网站后台 更新缓存交易网站的建设规划
  • 湖北省建设厅网站如何申诉济南做网站建设的公司
  • 培训教育的网站怎么做制作网站必做步骤
  • 中国建设银行章丘支行网站品牌营销推广方案
  • 江西做网站的公司有哪些wordpress 企业 模板
  • 中国建设银行u盾下载假网站吗备案域名租用
  • 网站建设好之后都有哪些推广方法怎么做无货源电商
  • php网站开发实例教程源代码学生个人网页设计作品模板
  • 网站建设宣传册广州网站设计报价
  • 网站建设业务饱和了吗建投五公司网站
  • 有哪个网站能卖自己做的衣服app推广方案
  • 腾讯做网站上传企业官网建设_创意网站建设
  • 公司如何做网站做推广怎么做外语网站
  • 建网站公司用什么网站程序上海网上推广优化
  • 中国制造网 做网站费用东莞阳光网官网首页
  • 网站开发实用技术知识点.net手机网站源码
  • 做免费看电影的网站不违法吗企业邮箱格式怎么写才正确
  • 网站页头背景西安门户网站
  • 做网站499浙江公司响应式网站建设推荐
  • 网站设计学习外贸做那种网站
  • 互联网创业项目整合网站京东自营入驻流程及费用
  • asp网站500错误网页设计师专业培训
  • 泉州网站制作套餐整屏幕滑动的网站
  • 做阿里巴巴网站多少钱如何卸载安装wordpress
  • 企业综合型网站建设方案成都比较好的装修设计公司