一、初始化一个npm包

  1.新建一个文件夹(名称随意,建议和报名一致),输入命令 :npm init -y

会自动生成一个包的说明文件 package.json如下(本文以scroll-antd-table为例):

{
"name": "scroll-antd-table",//包的名称用于别人 npm install xxxx的时候使用
"version": "1.0.0",//包的版本号
"description": "",//包的描述信息
"main": "index.js",//包的主入口文件,默认index.js根据自己的实际情况修改,下文会讲到
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [], //关键词,有助于别人在npm search的时候找到这个包
"author": "",//作者信息
"license": "ISC",//许可证类型,表明使用权利和限制
}

  2,修改package.json文件

  main:“dist/index.js”  //main属性是告诉别人这个包的最终文件是在dist/index.js里面  

  完善包的其他信息

二、创建包的内容代码

新建一个index.js文件输入要做的组件的内容(scroll-antd-table示例仅供参考)

这里要安装下自己引用的第三方包antd,npm -i antd react -D

import React from "react"
import { Table } from "antd" export default function (props) {
return (
<div >
<Table {...props} />
</div>
)
}

三 打包项目

  1 安装webpack和babel    npm i webpack webpack-cli babel -D   OR   yarn add webpack webpack-cli babel -D

  2  新建 webpack.config.js 文件

module.exports = {
entry: './index.js',
output: {
path: __dirname + '/dist',
filename: "bundle.js",
libraryTarget: "umd",
library: 'scroll-antd-table',
},
externals: {
'react': 'react',
'react-dom': 'react-dom',
'antd': 'antd'
},
mode: "production",
module: {
rules: [
{
test: /(\.js|\.jsx)$/,
use: {
loader: 'babel-loader'
},
exclude: '/node-modules/'
}
]
},
}

 3 新建 .babelrc 文件

{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}

4 执行 npm run build  生成打包的 dist/bundle.js 文件

四.本地测试

  开发完成想要需要现在本地验证一下怎们操作呢?

 1. 在npm包项目目录下执行npm link  ,这样npm 模块项目就会注册在在本地全局中了

 2. 新建一个验证项目可以用create-react-app, 创建好后,执行 npm link 包名 (模块package.json 中的name)

3. 如果这样就启动项目的话会报如下的错误(如果模块中引用了react )

Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app

这是因为在验证项目中和在模块包中都引用了react 导致了 3. You might have more than one copy of React in the same app

解决办法是

  1.在验证项目的目录下 执行   cd node_modules/react && npm link

  2.在模块包项目目录下执行    npm link react

  3.重新启动下验证项目即可

    解除关联引用可以使用 npm unlink  [包名]

五.发布模块包

  1.  登录 npm官网 注册账户 ,顺便搜一搜有没有和你的包名(package.json中的name)重复的模块

    2.  在npm模块包目录下运行 npm login 依次输入用户名,密码和邮箱

    3.  执行 npm publish

   注意:必需用 npm的原始镜像 如果修改过,要改一下 npm config set registry https://registry.npmjs.org/

4. 发布成功后到官网上搜索就能看到自己的项目了,

      在其他项目中 npm -i 包名 -S  就能成功引用使用了

     六 升级和删除

  1.升级更新包

     1.1修改好代码内容后重新 npm  run build 打包项目

     1.2  执行 npm version patch 更新包的版本(package.json 文件中的version 会自动增加,也可以手动修改)

     1.3  执行  npm publish

     2.删除npm 包

1.1  删除指定版本 npm unpublish 包名@版本号

    1.2  彻底删除整个包 npm unpublish 包名 --force

从0开始用webpack开发antd,react组件库npm包并发布的更多相关文章

  1. 使用dumi生成react组件库文档并发布到github pages

    周末两天玩了下号称西湖区东半球最牛逼的react文档站点生成工具dumi,顺带结合github pages生成了react-uni-comps文档站, 一套弄下来,感觉真香,现在还只是浅尝,高级的特性 ...

  2. jquery插件模式开发和react组件开发之间的异同

    jquery插件模式开发和react组件开发之间的异同

  3. 如何快速构建React组件库

    前言 俗话说:"麻雀虽小,五脏俱全",搭建一个组件库,知之非难,行之不易,涉及到的技术方方面面,犹如海面风平浪静,实则暗礁险滩,处处惊险- 目前团队内已经有较为成熟的 Vue 技术 ...

  4. React 组件库框架搭建

    前言 公司业务积累了一定程度,需要搭建自己的组件库,有了组件库,整个团队开发效率会提高恨多. 做组件库需要提供开发调试环境,和组件文档的展示,调研了几个比较主流的方案,如下: docz 配置简单,功能 ...

  5. 七个不可错过的React组件库与开发框架

    React是如今最火爆的前端技术,而React最棒的一个特点就是有大量功能丰富的组件库和开发框架可用.从按钮到卷轴到工具条,应有尽有,而且这些组件可以各行其是,也可以组装成复杂的UI,你也可以把UI分 ...

  6. 如何开发一个npm包并发布

    一.安装nodejs 不多说了,网上教程多得是 二.创建自己的npm包 目录结构 npm-test a.js b.js package.json 开发 为了简单便于理解,就开发一个简单地hello程序 ...

  7. 如何开发一个npm包并发布到npm中央仓库

    转自: https://liaolongdong.com/2019/01/24/publish-public-npm.html 如何开发一个npm包并发布到npm中央仓库需求背景:平时在项目工作中可能 ...

  8. 如何从0开发一个Vue组件库并发布到npm

    1.新建文件夹在终端打开执行 npm init -y 生成package.json如下,注意如果要发布到npm,name不能有下划线,大写字母等 { "name": "v ...

  9. React组件库

    图表组件库:Recharts(React和D3构建的图表库) UI组件库:react-bootstrap

随机推荐

  1. js Object扩展自定义方法,jQuery抛出 Uncaught TypeError: matchExpr[type].exec is not a function

    使用Jquery的时候,想在Object原型上添加自己扩展的方法的时候,启动项目之后,打开网页就会报如上错误信息,经过测试,可以在Object下的具体类型上进行扩展自定义方法,如String,Arra ...

  2. 什么是 REST / RESTful 以及它的用途是什么?

    Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计 算机系统通过 Internet 进行通信的架构风格.这使得微服务更容易理解和实现 ...

  3. 常见算法的时间复杂度(大O计数法)

    定义 ​ 对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率. 对于算法 ...

  4. SVN报错之“Error: Please execute the 'Cleanup' command. ”

    问题 Error: Please execute the 'Cleanup' command. 需要清理下,注意SVN拉数据的时候别打开其中的问题 解决方案

  5. instanceof关键字使用的方法(解决转型异常ClassCastException)

    一丶问题显现: 当你是父类的情况下,像使用子类的特定功能,就需要向下转型,但向下转型有可能会报错(ClassCastException) 而instanceof关键字就是解决异常的小能手,他能判断是否 ...

  6. kali Linux 渗透测试 | ettercap图形界面(ARP 欺骗 + DNS欺骗)

    上次我们使用 arpspoof 工具在命令行中完成了 arp 欺骗实验,今天我们用另一种工具 ettercap 工具来实现.ettercap支持图形化操作,对新手非常友好,并且操作非常简单, ette ...

  7. Easyx库安装教程

    目录: 安装 使用 帮助文档 安装 打开Easyx官网https://easyx.cn/ 点击图中下载按钮,下载Easyx库.或者直接点此下载 双击运行 图中标注的绿色框内为官方提供的帮助文档,红色框 ...

  8. InfoQ Trends Report

    InfoQ Trends Report InfoQ Trends Report Culture & Methods Trends Report - March 2021 DevOps and ...

  9. 使用jenkins实现前端自动化打包部署(Linux版本)

    我们这边好多小组觉得每次测试人员叫我们开发打包部署到某某个测试环境人工操作比较麻烦,因为他们想做到只专注于开发,不管这些琐碎的事.于是有个组长问我前端能不能用Jenkins去执行这一个固定的流程,因为 ...

  10. css样式权重优先级,css样式优先级

    原文:http://www.bkjia.com/Javascri... 样式选择器权重优先级: important > 内嵌样式 > ID > 类 > 标签 | 伪类 | 属性 ...