发布于 2026-01-06 13 阅读
0

发布我的第一个 NPM 包

发布我的第一个 NPM 包

过去几周,我一直在做一个副项目,并通过一系列博客文章记录下来。这个项目耗时较长,所以我想稍作休息,写写我第一次在 NPM 上发布软件包的经历。随着我在代码编辑器里工作的时间越长,我越发意识到需要一些无论在哪个项目中都能通用的辅助函数。我之前的解决方案要么是从头开始重写这些辅助函数,要么效率稍高一些,直接从其他项目中复制粘贴一个我写好的函数。

今天我决定是时候把这些辅助函数整理到一个单独的仓库里了,这样我就不用再费劲地去翻找几个月前那个我记得用过这些函数的项目了。我创建了一个 GitHub 仓库:https://github.com/lucsedirae/helper-library,并把几个辅助函数加载到了一个 index.js 文件中,这样我就不用老是去找这个文件才能开始使用了。

后来我想到,如果直接通过 NPM 安装这个 index.js 文件,然后像导入其他 NPM 发布的依赖项一样导入其中的函数,那就太好了。我不知道该从何入手,于是上网搜索了一下,发现其实过程非常简单,而且 NPM 的基础免费会员套餐就提供了无限量的公共软件包访问权限。

初始化 package.json

从 GitHub 网站图形界面克隆并初始化仓库后,第一步是npm init在本地机器上新仓库的根目录运行命令。这会执行一个命令行脚本,询问有关包的基本信息,并在项目目录中创建一个 package.json 文件。务必包含 readme 文件、license 文件,并确保 NPM“入口点”是您想要存放函数的文件名。脚本建议的默认入口点npm init是 index.js,所以我使用了它。

在 index.js 文件中,我编写了几个我一直需要的辅助函数。今天早上我需要的就是这个formatDate()。这是一个简单的函数,它接收一个 UTI 时间戳值,使用 Date 构造函数创建一个新的 JavaScript 日期值,然后使用 toLocaleDateString 方法返回该新值。我计划逐步扩展它的功能,因此我经常使用它作为辅助函数,而不是在每个用例中都内联执行这两个过程。这比导入像 moment.js 这样的时间处理库要轻量得多,也让我的代码库更加简洁。

我将这些初始函数上传到我的 GitHub 仓库,准备将该软件包发布到 NPM。

发布到 NPM

在正式发布软件包之前,您需要创建一个 NPM 帐户。您可以通过访问https://www.npmjs.com/或通过命令行运行命令来创建帐户npm adduser。请确保密码长度超过 10 个字符。NPM 会向您发送一封确认邮件,点击邮件中的确认链接后,即可发布软件包。

发布过程非常简单,只需npm publish --access public在要发布的包的根目录下通过命令行运行即可。脚本运行完毕后,我就可以在项目中测试我的发布。我的包是以我的 GitHub 用户名发布的,所以我导航到想要使用该函数的项目并运行了命令npm i lucsedirae。然后,我将函数导入到需要运行它的文件中:

import { formatDate } from 'lucsedirae';

然后调用该函数:

const todaysDate = formatDate(Date.now());

瞧!效果简直太棒了!

警告!

运行后我注意到npm i lucsedirae终端里出现了很多漏洞警告。我还没来得及深入研究如何修复这些问题,但我计划这样做,以加深我对 NPM 及其包发布环境的理解。因此,我不建议在生产环境中使用这样的包。发布项目时,我会用项目内部 utils 文件中的辅助函数替换掉这个导入语句,直到我更清楚地了解使用自定义 NPM 包的安全隐患。但作为一次学习经历,以及为练习项目存储常用辅助函数的一种方式,我对结果非常满意。

文章来源:https://dev.to/lucsedirae/publishing-my-first-npm-package-200g