热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将你的组件发布到npm平台上

npm包管理工具前端同学应该不陌生了,npm平台上有大量的优秀包,我们只需要简单几行命令就能down下来我们想要的东西,不用到处求种&#x

npm包管理工具前端同学应该不陌生了,npm平台上有大量的优秀包,我们只需要简单几行命令就能down下来我们想要的东西,不用到处求种,而且版本控制十分方便。如何将自己的组件或者插件发布到npm平台上去,方便项目中使用和其他人使用,本文介绍如何将一个react组件发布到npm平台上去。

在实际动手之前,先要查阅资料预见困难,分析执行步骤:

  1. 一个包的格式,应该有哪些东西。
  2. 将项目发布到npm平台上去。
  3. 持续集成。
组件格式

发布到npm平台的包,是一个项目工程,跟我们平时工作中的项目类似,应该有完整的一套构建,开发,测试,打包压缩等步骤,所以应该把这个包当成一个项目来对待。

​qj-button
├── example # 存放demo的代码
│ ├── src
│ │ ├── ButtonPage.js
│ │ └── index.js # 示例的入口文件
│ └── index.html # 示例页面
├── lib # 真实引用编译过的代码
│ └── Button.js # 编译过的源码
├── src # 存放源码的目录
│ └── Button.js # 组件源码
├── style # 样式文件
│ ├── base.scss
│ ├── button.scss
│ └── common.scss
├── .bebalrc # babel配置文件
├── .travis.yml # travis配置文件
├── index.js # 项目入口文件
├── style.css # 项目样式文件
├── package.json
├── postcss.config.json
├── webpack.config.json # 项目开发demo的时候 需要用到的webpack
└── README.md

这里要注意的点:

  1. 原文件:项目原文件在src下,原文件用ES6编写。原文件不可直接使用,需要打包编译之后才能使用。
  2. 编译:这里的编译有两种方式:使用babel编译;使用webpack编译。前者只能编译js,后者则可以编译很多类型的文件。我这里使用的babel编译,命令:./node_modules/.bin/babel src --copy-files --source-maps --extensions .js --out-dir libsrc目录下的js文件编译到lib目录下。
  3. 样式:scss样式引入也有两种:使用sass命令编译,输出到根目录style.css;使用webpack编译src文件的时候,将样式打包编译到js文件里。两者区别也很明显:前者需要手动编译,也需要手动引入,比较麻烦,但是文件独立,方便管理;后者自动编译,样式扩展性较差。各有取舍。
  4. demo:项目里有个example文件夹,里面是项目示例代码,本地开发的时候跑的项目;也有的包里面是docs文件夹,文档形式介绍。
  5. 测试:有的包本地开发的时候会有测试脚本,本地会有一个test文件夹,用于存放测试脚本。

项目完成之后,需要添加一个入口文件index.js,将你的组件导出:

module.exports = require('./lib/Button');
exports.default = require('./lib/Button');

需要改一下package.json里面的配置文件:

{"main": "index.js","style": "style.css","files": ["lib"]
}

上述代码指定入口文件和样式文件,并且发布的时候,只发布lib目录下文件和其余根目录的文件,其余的文件夹里的会传到github上,并不会被发布到npm平台上。

// 不会被npm忽略的文件
package.json
README (and its variants)
CHANGELOG (and its variants)
LICENSE / LICENCE// 一定会忽略的
node_modules
.*.swp
._*
.DS_Store
.git
.hg
.npmrc
.lock-wscript
.svn
.wafpickle-*
config.gypi
CVS
npm-debug.log
npm发布

项目已经准备好了,接下来可以着手发布了。首先npm上注册账号,别忘了去邮箱验证。然后输入:

npm adduser

接下来会以问答的形式向你了解你的用户名、密码以及公开的邮箱,之后输入

npm publish

然后看到进度条走,之后组件发布成功,可以到npm上搜索自己的包了。

这块可能会遇到一些报错,请看这里。

最后说一下版本管理。

一般来说版本分成三部分:A.B.C

  1. A表示大版本号,一般是项目较大改动的时候修改,可以参考理解iOS6 更新到iOS7 时候界面大幅改动;A为0的时候,表示项目处于开发阶段。
  2. B表示功能更新,或者项目模块改动的时候增加。
  3. C表示小改动,如修bug。
持续集成

一般来说你会看到一些项目README.md里面有一些icon如:

这些icon看起来很牛逼,但也不只是装逼用的。

持续集成(Continuous integration)的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

每个icon都表示一个功能,这里不多做介绍,有兴趣可以看看下列文章:

  1. 跟踪Github项目的持续集成状态
  2. 使用travis-ci集成一个vue.js项目
总结

经过上述操作,就可以完成了向npm平台发布一个包的过程,发布到npm的组件要持续维护。

项目源码地址

参考
  1. 八步亲手用npm开发React
  2. 在npm上发布你的组件
  3. 如何使用 ES6 编写一个 React 模块, 并且编译后发布到 NPM
  4. 如何发布Node模块到NPM社区



推荐阅读
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • feat: Enhances Jest Testing Capabilities with Snapshot Support ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
author-avatar
迷途羔羊1989_751
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有