如何发布一个 npm 包?

发布于 2022-09-21 12:46:05 字数 2976 浏览 140 评论 0

这篇文章主要介绍如何发布一个 npm 包,这个过程并不复杂,学完之后你可以发布任何你喜欢的代码到 npm 网站上,之后你可以使用 npm 命令安装在其他项目中。

发布到 npm 网站之前,你必须在 npm 网站上创建一个你自己的账号,这是网站的网址:https://www.npmjs.com/

然后本地登陆,在命令行中输入命令:npm adduser ,会通过提问的方式依次输入用户名密码和邮箱。

Username: 用户名
Password: 密码
Email: (this IS public) 邮箱

现在你已经登陆了,我们可以开始创建一些文件发布到 npm 上。选择一个空的文件夹,通过 npm init 进行初始化,这里也会通过提问的方式进行配置仓库的信息。

1、name  包名。
2、description  包简介。
3、version  版本号。
4、keywords  关键词数组,NPM中主要用来做分类搜索。一个好的关键词数组有利于用户快速找到你编写的包。
5、maintainers  包维护者列表。
6、contributors  贡献者列表。
7、bugs 一个可以反馈 bug 的网页地址或邮件地址。
8、licenses  当前包所使用的许可证列表,表示这个包可以在哪些许可证下使用。(比较宽松的许可证是 MIT 许可证,只要用户在项目副本中包含了版权声明和许可声明,他们就可以拿你的代码做任何想做的事情,你也无需承担任何责任。)
9、repositories  托管源代码的位置列表,表明可以通过哪些方式和地址访问包的源代码。
10、dependencies  使用当前包所需要依赖的包列表。

{
  "name": "is-promise-function",
  "version": "1.0.0",
  "description": "判断传入的参数是promise函数",
  "main": "./index.js",
  "scripts": {
    "test": "jest"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/wuxianqiang/isPromise.git"
  },
  "author": "wuxianqiang",
  "license": "MIT",
  "devDependencies": {
    "@types/jest": "^25.2.3",
    "jest": "^26.0.1"
  }
}

现在我写一个方法判断传入的参数是否是一个 promise 对象,具体代码如下:

function isPromise(obj) {
  return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
}

module.exports = isPromise

代码很简单,判断传入的对象上是否有then属性即可。写完代码之后执行命令 npm publish 进行发布到 npm 网站上,发布之前确保你使用的 npm 源是指向 npm 网站的。

作为为模块和包服务的工具,NPM十分便捷。它实质上已经是一个包共享平台,所有人都可以贡献模块并将其打包分享到这个平台上,也可以在许可证(大多是MIT许可证)的允许下免费使用它们。

潜在的问题在于,在NPM平台上,每个人都可以分享包到平台上,鉴于开发人员水平不一,上面的包的质量也良莠不齐。出现问题那都是有可能的。

4 月 25 日,一个名为 is-promise 的 npm 库进行了更新并发布了 v2.2.0 版本,没想到这一次更新却使 JavaScript 生态陷入危机,据媒体报道,目前已有数百万个项目受到了影响,而事件的始作俑者竟是一个仅仅 单行 的 JavaScript 库。

考量包质量的地方在于包中的测试用例和文档的状况,一个没有单元测试的包基本上是无法被信任的,没有文档的包,使用者使用时内心也是不踏实的。

所以我们该有的还是要有,都给它安排上,单元测试我们使用 jest 这个第三方库,把它安装到开发依赖里面去。

npm install @types/jest jest -D

在 package.json 里面添加运行的脚本

{
  "scripts": {
    "test": "jest"
  }
}

然后创建一个名为 qs.spec.js 的文件,里面写测试代码:

var isPromise = require('./index')

var promise = {then: function () {}};

it('测试{then: function () {}}是promise函数', () => {
  expect(isPromise(promise)).toBeTruthy()
})

it('测试100不是promise函数', () => {
  expect(isPromise(100)).not.toBeTruthy()
})

在编写测试时,通常需要检查值是否满足某些条件。 Expect 使你可以访问许多 匹配器(比如 toBeTruthy 匹配 if 语句为真),从而使您可以验证不同的内容。

之前配置了运行脚本,然后现在执行命令 npm run test 可以生成测试报告,查看本次测试的内容结果。

单元测试也写了,现在就差一个说明文档,创建一个 README.md 文件,描述这个包的主要功能即可。

一个优秀的第三方包应该具备以下特点

1、具备良好的测试。
2、具备良好的文档(README、API)。
3、具备良好的测试覆盖率。
4、具备良好的编码规范。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

〃安静

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

苍风燃霜

文章 0 评论 0

悸初

文章 0 评论 0

撧情箌佬

文章 0 评论 0

森罗

文章 0 评论 0

lyn1245

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文