随着前端技术的迅猛发展,npm 成为了前端包管理的主流方案。而使用 npm 包有时候会遇到创建公共 npm 包的需求,这时候就需要用到 generator-npm-lib 这个 npm 包。本文将介绍如何使用 generator-npm-lib 创建自己的 npm 包并发布到 npm 上。
什么是 generator-npm-lib
generator-npm-lib 是一个生成 npm 包初始文件结构的 Yeoman generator,包含了一些常用的配置,比如:
- git 初始仓库
- npm 初始配置
- eslint 初始配置
- Travis CI 初始配置
- 以及一些开源协议模板
使用 generator-npm-lib 可以快速创建一个标准的 npm 包模板,而不必再手动创建所有这些文件和配置。generator-npm-lib 的使用需要先安装 Yeoman,执行以下命令:
npm install -g yo generator-npm-lib
如何使用 generator-npm-lib
创建项目
在命令行中输入以下命令,按照提示完成项目信息:
yo generator-npm-lib
其中涉及的信息包括:
- 项目名称
- 项目描述
- 作者名
- GitHub 用户名
- 作者邮箱
- 开源协议类型(默认 MIT)
然后 generator-npm-lib 就会根据这些信息创建一个 npm 包基础结构。
开发 npm 包
generator-npm-lib 已经帮忙搭建好了基础结构,现在我们需要在这个基础上完善和开发自己的 npm 包。
编写代码
在 src
目录下开始编写自己的代码。源代码可以使用 CommonJS 或者 ESModule 格式。注意,不要使用 Node.js 特有的全局对象,如 process
。
编写测试
在 test
目录下创建对应的测试文件,编写自己的测试用例。测试使用 Mocha 和 Chai。
执行测试
执行以下命令来运行测试:
npm test
此时会执行 test
目录下的所有测试用例。
打包代码
执行以下命令来构建代码:
npm run build
此时会在 dist
目录下生成一个打包后的代码文件。
发布代码
执行以下命令来登录 npm 官方网站,并发布 npm 包:
npm login npm publish
至此,我们的 npm 包就已经成功发布到 npm 官方网站。
generator-npm-lib 的应用场景
generator-npm-lib 的应用场景包括但不限于:
- 快速生成 npm 包的初始结构,方便开发者快速开始;
- 统一 npm 包初始结构规范,减少不必要的人为配置造成的问题;
- 方便开发者进行快速迭代和版本发布,提高前端开发效率和规范性。
简单示例
下面是一个简单的使用 generator-npm-lib 创建的 npm 包示例,该 npm 包提供了一个 Hello World 的函数,将指定的字符串输出到控制台。
-- -------------------- ---- ------- -- -------- --- - ------ ----- ------- -- ------- - ------ -------- --- ------ -- ------- -- -------- ------------- - ------------------ ---------- - -------------- - ---------
-- -------------------- ---- ------- -- ------------------ ----- - ------ - - ---------------- ----- -------- - ------------------ -------------------- -- -- - ---------- ------ ----- --------- -- -- - ------------------ ---------------------------- --- ---
以上示例代码可以打包成一个可以发布的 npm 包。
该 npm 包的使用示例:
const sayHello = require('your-npm-package'); sayHello('John');
总结
generator-npm-lib 可以快速帮助我们生成 npm 包初始结构,同时统一了结构规范,便于开发者进行快速迭代和版本发布。使用 generator-npm-lib 创建 npm 包可以大大提高前端开发效率和规范性,是一个非常好的前端工具。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600557de81e8991b448d4ec8