简介

在本文中,我很想讨论我在构建包并将其发布到 npm(节点包管理器)时的历程。

昨天,我发布了快速文件转换器包,这是一项成就,我可以将我学到的一些东西提供给社区,因为我从那里得到了很多(我们所有人都这样做)。

我们将更加关注本文中的代码库以及在创建下一个包时可能对您有所帮助的提示和说明。


Pdf Excel 生成器 VS 快速文件转换器

去年,我发布了一个名为“Pdf Excel Generator”的包,你可以找到存档的 GitHub 存储库。截至今天,包已在 NPM上弃用。

Fast File Converter 是 Pdf Excel Generator 的升级版,PEG 存在一些限制:

  • 它是用纯 JS 编写的。

  • 里面有很多糟糕的代码和糟糕的架构。

  • 它只支持 2 种类型(PDF & Excel)

  • 没有成长空间。

  • 输入验证错误

  • 文档效率低下。

然而,有了FFC,我打开了一扇拥有更多可能性的大门:

  • 用TS写的

  • 使用良好实践和类型的 TS 更容易实现出色的源代码

  • 现在支持 7 种不同的类型。

  • 编写的代码和架构在未来有很大的增长和扩展空间。

  • 带有TS减速文件,您可以享受来自TS的输入验证。

总体而言,与之前的软件包相比,这是一个巨大的提升和改进。


快速文件转换器(FFC)代码库架构

图片说明

上图是 FFC 的文件夹架构,它是在 MIT 许可下开源的,你可以在 GitHub上找到它。

演示文件夹:

如果你想创建一个包,你必须提供一些例子让开发者理解使用你的包。

我创建了一个演示文件夹并且我在其中添加了一些适合我的包使用的示例,“适合”是指示例可以根据您的包进行更改,在我的情况下,我有构建了一个运行服务器的快速应用程序,以使用此包并在您点击示例的路线时下载它。

Dist 文件夹:

由于有些人可能不知道 dist 文件夹是什么,dist 或目标文件夹是我为 Typescript 构建指定的目录,所以基本上它是 Project 文件夹的构建。

但是,我提交此文件夹可能看起来很奇怪,通常不建议将您的构建推送到 GitHub,但是:

1.如果你的包在浏览器(客户端)上运行,你必须有它,这样只有JS在浏览器上运行

2.我的Demo文件夹不是从NPM导入包而是从dist文件夹导入的,所以它也可以作为开发工具使用,通过demo可以马上看到你的改动。

库文件夹:

Lib 或 Library 文件夹是我们包功能的所有核心 TS 文件所在的目录。

这可能是最重要的文件夹,因为通常您只在此文件夹中编写代码来更改包的源代码并对其进行更改。

最后,此目录中的 TS 文件将被编译为 JS 以准备生产。

脚本文件夹:

我们不能用我们的 TS 代码做所有事情,在某些时候,实现您想要实现的目标会受到限制。

scripts 文件夹用于存放我的 bash 文件,bash 文件是纯文本文件,其中包含通常与操作系统交互的一系列命令。

你可能会问我在这个项目中使用了什么 Bash,我只有 2 个 bash 脚本

第一个是在构建发生时将我的资产移动或复制到构建文件夹

第二种是在构建发生时将 Type 文件夹移动或复制到构建文件夹,以便文件声明正常工作。

测试文件夹

无论您正在编写什么类型的测试,测试对于任何项目都是必不可少且重要的。

尽管我已经创建了一个包并且单元测试更有意义,但我认为集成测试对我的情况更有利,因为我需要回复用户。

所以我在测试文件夹中编写了集成测试来测试 Demo Routes 并确保我们所有支持的类型都能正常工作而没有任何错误。

类型文件夹:

类型文件夹是我的自定义类型所在的文件夹,任何 TS 项目都应该有这个文件夹,这样你的类型就不会与应用程序逻辑混在一起,因为我可以告诉你,带有代码的类型很快就会变得一团糟。

架构的其余部分

没有太多要讨论的了,util 文件夹是用于实用功能的,但我们在这个项目中没有任何要提及的内容。

  • .npmignore 是一个文件,用于指定当有人执行 npm 安装时可以下载项目的哪一部分,它是一个关键文件,因为您不希望您的用户在他们的节点模块中拥有整个项目。

  • LICENSE 是一个用于指定您正在使用的许可证的文件,这里有很多选项,但大多数开源项目都与 MIT 一起使用,因为它提供了包的完整使用权。

  • readme.md 是一个你应该仔细描述你的包的文件,如果有人看到你的包,这是一个入口点,你应该仔细和完整地解释和记录包。


结论

感谢您阅读本文:)

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐