热门标签 | 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社区



推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
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社区 版权所有