npm包开发测试与发布
NPM 包开发测试与发布
- NPM 包开发测试与发布
- 引言
- 1. 开发步骤
- 1.1. 项目创建
- 1.2. 工具类功能实现
- 1.3. ts文件编译
- 2. npm包本地测试
- 2.1. 将npm包文件引入项目
- 2.2. npm包功能测试
- 3. 发布
- 4. 注意事项
- 我的NPM包
NPM 包开发测试与发布
引言
在项目开发过程中,有时会遇到在多个项目中使用到具有相同或类似功能的工具方法,这时就需要将这些工具方法代码块在多个项目中分别定义,不方便统一管理。
针对以上情况,可以将这些公用的工具方法放入一个单独的项目中,打包发布到 NPM 上,在项目中通过npm包引用的方式使用工具方法。
下面简要记录一下 NPM 工具包开发、测试与发布流程。
1. 开发步骤
1.1. 项目创建
Step1: 首先创建一个空项目,使用 Webstorm或者VSCode 打开项目或者使用命令切换至项目根目录,创建 src
文件夹和 index.ts
文件。
其中 src
目录下存放工具类/工具方法的源码文件,index.ts
文件内容用于将工具类/工具方法导出,以便在其它模块导入使用。
Step2: 接着在项目中打开终端使用 git init
命令和 npm init
命令初始化项目的 git
信息和 npm
信息。
如果想将包发布成有作用域的包,使用如下命令:
npm init --scope=@my-username
也可以在使用 npm init
命令生成 package.json
文件后手动指定包名及其它信息。
下面进行工具类/工具方法的功能实现。
1.2. 工具类功能实现
Step1: 在 src/
目录下创建 ts
文件,在 ts
文件中编写使用到的工具类或者工具方法,编写完毕后使用 export
将类或者方法导出,以供其它模块使用。示例如下。
src/ArrayUtils.ts
文件内容如下:
/*** 检验参数是否为数组,如果是,则原样返回,否则返回空数组* @param arr*/
export function arrayCheck(arr: any): Array<any> {if (Object.prototype.toString.call(arr) === '[object Array]') {return arr;} else {return [];}
}export class ArrayUtils {static arrayCheck(arr: any): Array<any> {return arrayCheck(arr);}
}
Step2: 在 index.ts
文件中使用export
将 src/
目录下编写好的 ts
文件内容全部导出。示例如下。
index.ts
文件内容
export * from './src/ArrayUtils';
其它工具类或工具方法文件,同理,在 src/
目录下创建文件编写好代码后,使用 export
导出,在 index.ts
文件中使用 export
将 src/
目录下工具类文件内的类和方法全部导出,供其它模块使用。
工具类代码编写完毕后,下面对代码进行编译。
1.3. ts文件编译
在项目终端执行 npm i typescript -D
命令安装 typescript
依赖。
在项目根目录下创建 tsconfig.json
文件,配置 ts
文件的编译选项。
配置示例如下:
{"compilerOptions": {"baseUrl": "./","module": "es6","target": "es2020","allowJs": false,"declaration": true,"outDir": "./dist","strict": true},"exclude": ["node_modules"],"include": ["index.ts","src/*"]
}
配置项含义:
baseUrl
:模块解析的基准目录。module
:指定生成哪个模块系统的代码。【这里需要提前了解不同模块系统之间的异同】target
:指定ECMAScript目标版本。declaration
:生成相应的 .d.ts文件。outDir
:指定编译文件的输出路径。include
:指定需要编译的文件。strict
:启用所有严格类型检查选项。
更多配置选项信息,请查阅 TypeScript 配置选项。
配置完成后,在终端使用tsc
命令将需要编译的ts
文件编译成对应的js
文件和.d.ts
文件。
执行编译命令后,会生成编译文件。项目文件结构如下:
编译完毕后,修改 package.json
文件中的 main
属性值,让其指向编译后的 index.js
文件。
{"name": "ts-utils","version": "1.0.0","description": "ts-utils","main": "./dist/index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"repository": {"url": ""},"author": "","license": "ISC","devDependencies": {"typescript": "^4.6.3"}
}
进行到这一步,下面就可以在本地进行NPM包的测试了。
2. npm包本地测试
以下NPM包开发项目称为 项目A ,引用npm包的测试项目称为 项目B。
2.1. 将npm包文件引入项目
两种测试方式,具体介绍如下:
第一种:使用npm link
命令关联依赖包使用
a. 在 项目A 的根目录下使用 npm link
命令将 npm包模块注册到全局,在全局的node_modules
目录下会出现当前包所在项目的快捷方式引用。
E:\PersonalProject\ts-utils>npm link
audited 1 package in 1.121s
found 0 vulnerabilitiesC:\Users\zhang\AppData\Roaming\npm\node_modules\ts-utils -> E:\PersonalProject\ts-utilsE:\PersonalProject\ts-utils>
b. 在 项目B 的根目录下使用 npm link package-name
命令将包关联到项目中,然后正常使用即可。
E:\PersonalProject\tsom-login>npm link ts-utils
E:\PersonalProject\tsom-login\node_modules\ts-utils -> C:\Users\zhang\AppData\Roaming\npm\node_modules\ts-utils -> E:\PersonalProject\ts-utilsE:\PersonalProject\tsom-login>
注意: 在 项目B 的 package.json
文件中加入依赖包,例如在dependencies
项中加入以下依赖:
"ts-utils": "1.0.0"
此处的包名和版本号对应 npm 包中 package.json
中定义的包名和版本号。
如果不加此依赖项,会出现包无法引入,报错的情况。
测试没问题后,在 项目A 的根目录下使用 npm unlink
命令解除项目与全局的关联。在 项目B 的根目录下使用 npm unlink package-name
命令解除项目与本地npm包的关联。
第二种:复制 npm包 整个文件夹到 项目B 的 node_modules
目录下,在 package.json
中添加依赖项。
2.2. npm包功能测试
支持直接使用方法名称调用对应方法
import { arrayCheck } from 'ts-utils';console.log(arrayCheck(undefined)); // []
console.log(arrayCheck([])); // []
也可以使用类名.方法名调用
import { ArrayUtils } from 'ts-utils';console.log('arrayCheck ==? ', ArrayUtils.arrayCheck(undefined)); // []
console.log('arrayCheck ==? ', ArrayUtils.arrayCheck([1, 2, 3])); // [1, 2, 3]
3. 发布
使用 npm login
命令,输入用户名密码登录npm。
使用 npm publish
命令发布。
如果 npm 包作为有作用域的包进行发布,请使用如下命令:
npm publish --access public
4. 注意事项
发布之前到 npm 网站上确定一下 npm 包名是否已被其它用户使用,如果被占用,请更换。
可以将包名换成类似 @scope/package-name
的形式,将其作为一个有范围的公共包进行发布。
我的NPM包
@zhg-x/ts-utils
:https://www.npmjs.com/package/@zhg-x/ts-utils
npm包开发测试与发布相关推荐
- 如何开发一个npm包并发布
一.安装nodejs 不多说了,网上教程多得是 二.创建自己的npm包 目录结构 npm-test a.js b.js package.json 开发 为了简单便于理解,就开发一个简单地hello程序 ...
- 从零开始发布自己的NPM包
大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan02 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...
- npm收录了哪些包_手把手教你制作一个小而美丽的 npm 包并发布
第1步:npm账户 你需要一个 npm 账户,如果米有,注册地址是:npmjs.com/signup 第2步:登录 进入你自己电脑的终端(cmd)并输入: npm adduser 也可以使用以下命令: ...
- 与同事协作一起维护发布同一个npm包,报错You do not have permission to publish
问题 在公司中与同事一起共同维护发布一个npm包(不同的npm账号共同维护同一个npm包),当我npm publish下一个版本的时候,出现报错,内容如下 npm ERR! code E403 npm ...
- npm 卸载_手把手教你创建一个NPM包
前言 在前端,基于NodeJs的工程化开发已经是一个很成熟的解决方案,而工程化的构建又离不开诸多便捷又高效的可复用的NPM包,那么这些包是如何制作.发布的呢?今天我们就来研究一下这个问题. ...
- 了解node.js模块化和npm包
模块化-理解模块化 根目录 ├── index.html # 主页的页面 ├── index.js # 主页需要用到的js代码 │ └── getData() # 是index.js中定义的函数 └─ ...
- nodejs 之npm包
1.npm常见三个命令 项目初始化 npm init (注意:不要起中文名字) 安装包 npm install 包名 可以简写为 npm i 包名 引入包,使用 补充知 ...
- 如何开发、本地测试、发布 Laravel 扩展包?Class ‘Angkee\Admin\AdminServiceProvider‘ not found
在按照文档实践当中遇到错误.我修正一下. Class 'Angkee\Admin\AdminServiceProvider' not found 应该是这样的 "Angkee\Admin\& ...
- 发布一个持续集成的npm包并加上装逼小icon
前言 随着入坑时间的增长,很多小伙伴在使用第三方轮子时不满足于下载xxx.js,script标签引入xxx.js,然后使用轮子的原始方式.想要高大上一点,于是小伙伴们跟npm邂逅了.后来有的小伙伴又想 ...
最新文章
- 赛迪顾问2010-2011年度中国信息安全产品市场研究年度报告
- SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]
- ASP.NET Core实现类库项目读取配置文件
- 大数据到底是不是“算命”?技术大牛们这样说
- java web教学大纲_《JAVAWEB程序设计》教学大纲.pdf
- Oracle11g创建表空间语句
- 使用 docker+tmux 加强容器调度
- Ubuntu16.04 ORB_SLAM2的安装教程
- python数据库操作批量sql执行_Python批量修改数据库执行Sql文件
- ubuntu之间传输文件
- N1刷Android TV,贫民种草指北 篇二:N1盒子:不谈刷机,只谈使用!
- DTU的工作原理是什么?DTU是怎样工作的?
- 康托尔悖论:大全集不存在,即包含一切集合的集合是否存在
- python 一,二维数据的个数化和处理
- 看看一位清华计算机专业的学生怎么看LINUX与WINDOWS的
- 仿朋友圈页面(超小白)
- 如何解决地图已加载却不能渲染的问题?
- 表中数据的更改量保存视图
- Proxifier设置代理上网详细操作
- 80核处理器_80多岁仍奋战一线,龙芯巾帼英雄黄令仪获CCF夏培肃奖