Open wuxianqiang opened 4 years ago
这篇文章主要介绍如何发布一个npm包,这个过程并不复杂,学完之后你可以发布任何你喜欢的代码到npm网站上,之后你可以使用npm命令安装在其他项目中。
发布到npm网站之前,你必须在npm网站上创建一个你自己的账号,这是网站的网址:https://www.npmjs.com/。
然后本地登陆,在命令行中输入命令:·npm adduser ,会通过提问的方式依次输入用户名密码和邮箱。
npm adduser
Username: 用户名 Password: 密码 Email: (this IS public) 邮箱
现在你已经登陆了,我们可以开始创建一些文件发布到npm上。选择一个空的文件夹,通过 npm init 进行初始化,这里也会通过提问的方式进行配置仓库的信息。
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 publish
作为为模块和包服务的工具,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的文件,里面写测试代码:
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 语句为真),从而使您可以验证不同的内容。
toBeTruthy
if
之前配置了运行脚本,然后现在执行命令npm run test可以生成测试报告,查看本次测试的内容结果。
npm run test
单元测试也写了,现在就差一个说明文档,创建一个README.md文件,描述这个包的主要功能即可。
README.md
一个优秀的第三方包应该具备以下特点
1、具备良好的测试。 2、具备良好的文档(README、API)。 3、具备良好的测试覆盖率。 4、具备良好的编码规范。
这篇文章主要介绍如何发布一个npm包,这个过程并不复杂,学完之后你可以发布任何你喜欢的代码到npm网站上,之后你可以使用npm命令安装在其他项目中。
发布到npm网站之前,你必须在npm网站上创建一个你自己的账号,这是网站的网址:https://www.npmjs.com/。
然后本地登陆,在命令行中输入命令:·
npm adduser
,会通过提问的方式依次输入用户名密码和邮箱。现在你已经登陆了,我们可以开始创建一些文件发布到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 。使用当前包所需要依赖的包列表。
现在我写一个方法判断传入的参数是否是一个promise对象,具体代码如下:
代码很简单,判断传入的对象上是否有then属性即可。写完代码之后执行命令
npm publish
进行发布到npm网站上,发布之前确保你使用的 npm 源是指向 npm 网站的。作为为模块和包服务的工具,NPM十分便捷。它实质上已经是一个包共享平台,所有人都可以贡献模块并将其打包分享到这个平台上,也可以在许可证(大多是MIT许可证)的允许下免费使用它们。
潜在的问题在于,在NPM平台上,每个人都可以分享包到平台上,鉴于开发人员水平不一,上面的包的质量也良莠不齐。出现问题那都是有可能的。
考量包质量的地方在于包中的测试用例和文档的状况,一个没有单元测试的包基本上是无法被信任的,没有文档的包,使用者使用时内心也是不踏实的。
所以我们该有的还是要有,都给它安排上,单元测试我们使用 jest 这个第三方库,把它安装到开发依赖里面去。
在package.json里面添加运行的脚本
然后创建一个名为
qs.spec.js
的文件,里面写测试代码:在编写测试时,通常需要检查值是否满足某些条件。 Expect使你可以访问许多“匹配器”(比如
toBeTruthy
匹配if
语句为真),从而使您可以验证不同的内容。之前配置了运行脚本,然后现在执行命令
npm run test
可以生成测试报告,查看本次测试的内容结果。单元测试也写了,现在就差一个说明文档,创建一个
README.md
文件,描述这个包的主要功能即可。一个优秀的第三方包应该具备以下特点
1、具备良好的测试。 2、具备良好的文档(README、API)。 3、具备良好的测试覆盖率。 4、具备良好的编码规范。