antd自定义分页器_从零开始实现类 antd 分页器(三):发布npm

本文是使用 Typescript 开发类 antd 分页器,并发布 npm 的第三篇,因为最近在业务中使用了 antd 中的 Pagination 开发了相关业务,而自己又对组件的封装由很有兴趣,所以打算用 ts 来封装一个具有 antd 所有功能的 Pagination。相信你也能轻轻松松的发布一个 npm 组件了。

相关系列文章

从零开始实现类 antd 分页器(一):搭建项目架构

从零开始实现类 antd 分页器(二):分页核心代码

从零开始实现类 antd 分页器(三):发布npm

写作过程中有些方法的具体实现没有讲到,大家可以自行查看源码。本案例项目仓库:

闲来无事,造个轮子 —— darrell-wheels

发布到 npm

组件打包

我们修改 package.json 中的 main 字段,它的作用是声明组件的入口文件。

开发者在 import我们的组件的时候会引入main 字段中 export 的内容。

到现在为止我们的 package.json 内容如下:

{

"name": "darrell-wheels",

"version": "1.0.6",

"description": "some wheels",

"main": "lib/index.js",

"scripts": {

"start": "webpack-dev-server --config config/webpack.dev.config.js",

"build": "webpack --config config/webpack.prod.config.js",

"pub": "npm run build && npm publish"

},

"repository": {

"type": "git",

"url": "git+https://github.com/darrell0904/darrell-wheels.git"

},

"keywords": [

"wheels",

"pagination"

],

"author": "darrell",

"license": "ISC",

"bugs": {

"url": "https://github.com/darrell0904/darrell-wheels/issues"

},

"homepage": "https://github.com/darrell0904/darrell-wheels#readme",

"devDependencies": {

"@babel/cli": "^7.8.3",

"@babel/core": "^7.8.3",

"@babel/preset-env": "^7.8.3",

"clean-webpack-plugin": "^0.1.19",

"css-loader": "^1.0.0",

"file-loader": "^2.0.0",

"html-webpack-plugin": "^3.2.0",

"less": "^3.10.3",

"less-loader": "^5.0.0",

"mini-css-extract-plugin": "^0.9.0",

"style-loader": "^0.21.0",

"ts-loader": "^6.2.1",

"tslint": "^5.20.1",

"tslint-config-prettier": "^1.15.0",

"tslint-config-standard": "^8.0.1",

"tslint-loader": "^3.5.4",

"typescript": "^3.7.3",

"uglifyjs-webpack-plugin": "^1.2.7",

"url-loader": "^3.0.0",

"webpack": "^4.16.3",

"webpack-cli": "^3.1.0",

"webpack-dev-server": "^3.1.5",

"webpack-merge": "^4.2.2"

},

"dependencies": {}

}

复制代码

组件测试

在发布到 npm 之前,我们需要自己先测试一下组件的功能。

我们可以使用 npm link 把打包之后的组件引入到全局 node_modules 中,在根目录下运行命令:

npm run build

npm link

复制代码

接着我们进入到 example/src 文件,使用如下命令,将刚刚引入到全局的 darrell-wheels 映射到项目的 node_modules 中去:

cd example/src

npm link react-demo-component

复制代码接着修改 example/src/app.js 中的内容:

// import { Pagination } from '../../src/index';

import { Pagination } from 'darrell-wheels';

new Pagination('#pagination', {

total: 500,

onChange: (page, pageSize) => {

console.log('---page---', page);

console.log('---pageSize---', pageSize);

},

onShowSizeChange: (page, size) => {

console.log('---page--11-', page);

console.log('---size--11-', size);

},

});

复制代码我们可以看到页面中出现了分页组件,如下图:

到这里我们组件内部测试算是通过了,接下去我们就发布到 npm 上去。

发布组件

配置 .npmignore

此文件的作用就是:指定发布 npm 的时候需要忽略的文件和文件夹。如果省略掉这一项,所有文件包括源代码会被一起上传到 npm,如下所示。

# 指定发布 npm 的时候需要忽略的文件和文件夹

# npm 默认不会把 node_modules 发上去

config # webpack配置

example # 开发时预览代码

src # 组件源代码目录

.babelrc # babel 配置

复制代码

注册 npm 账号并发布

注册 npm 账号,有一点我们需要注意,一半我们在使用 npm 的时候 会用 taobao 的镜像,因为这样速度会比较快,但是当我们传到 npm 时,一定要切换到官方源。

我们可以通过 npm config list 查看当前使用的源地址,通过以下命令切换 npm 源:

npm config set registry http://registry.npmjs.org

复制代码我们也可以使用 nrm 来更方便的进行源管理,具体我这里就不详细说了,大家可以看:使用NRM进行NPM的源管理

最后我们使用 npm run pub 命令发布组件到 npm。

当看到下图,说明发布成功了:

我们在官网上搜索 darrell-wheels,可以看到如图:

在项目中使用

我们在 react 项目中使用一下,在这里我们就使用 create-react-app 快速搭建一个 react 项目:

// 全局安装 create-react-app

npm install create-react-app -g

// 使用 create-react-app 创建 my-app

create-react-app my-app

// 创建成功后,我们进入 my-app,并启动项目

cd my-app

npm start

复制代码

出现下图,说明项目启动成功:

接着我们安装 darrell-wheels:

npm install darrell-wheels -D

复制代码

最后我们修改一下 App.js 文件:

import React from 'react';

import './App.css';

import { Pagination } from 'darrell-wheels';

function itemRender(current, type, originalElement){

if (type === 'prev') {

return 上一个;

}

if (type === 'next') {

return 下一个;

}

if (type === 'page') {

return {`第${current}个`}

}

return originalElement;

}

class App extends React.Component{

componentDidMount() {

if (this.Pagination) {

new Pagination('#Pagination', {

total: 500,

showTotal: (total: any, range: any) => {

return `${range[0]}-${range[1]} of ${total} items`;

},

simple: false,

onChange: (page: any, pageSize: any) => {

console.log('---onChange---', page);

console.log('---onChange---', pageSize);

},

onShowSizeChange: (page: any, size: any) => {

console.log('---onShowSizeChange---', page);

console.log('---onShowSizeChange---', size);

},

itemRender: (current: any, type: any, originalElement: any): any => {

function createAEle (content: string){

let aEle = document.createElement("a");

aEle.innerHTML = content;

return aEle;

}

if (type === 'prev') {

return createAEle('上一个');

}

if (type === 'next') {

return createAEle('下一个');

}

if (type === 'page') {

return createAEle(`第${current}只`);

}

return originalElement;

}

});

}

}

render() {

return (

id="Pagination"

className="Pagination"

ref={

(Node) => {

this.Pagination = Node;

}

}

>

11111

);

}

}

export default App;

复制代码

重新运行一下 npm start ,我们可以看到 my-pagination 已经开始工作了:

小结

这篇文章是这个系列的最后一篇文章,到这里我们也完成了从零开始使用 typescript 开发一个类 antd 的分页器元素,通过这次开发,让我对 插件的开发流程、webpack 的配置、typescript 的基础使用、插件的打包发布测试 等大体有了一个比较清楚的认知。

希望能对大家有所帮助。

参考内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值