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 文件中使用exportsrc/ 目录下编写好的 ts 文件内容全部导出。示例如下。

index.ts 文件内容

export * from './src/ArrayUtils';

其它工具类或工具方法文件,同理,在 src/ 目录下创建文件编写好代码后,使用 export 导出,在 index.ts 文件中使用 exportsrc/ 目录下工具类文件内的类和方法全部导出,供其它模块使用。

工具类代码编写完毕后,下面对代码进行编译。


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>

注意:项目Bpackage.json 文件中加入依赖包,例如在dependencies项中加入以下依赖:

"ts-utils": "1.0.0"

此处的包名和版本号对应 npm 包中 package.json 中定义的包名和版本号。

如果不加此依赖项,会出现包无法引入,报错的情况。

测试没问题后,在 项目A 的根目录下使用 npm unlink 命令解除项目与全局的关联。在 项目B 的根目录下使用 npm unlink package-name 命令解除项目与本地npm包的关联。

第二种:复制 npm包 整个文件夹到 项目Bnode_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-utilshttps://www.npmjs.com/package/@zhg-x/ts-utils


npm包开发测试与发布相关推荐

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

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

  2. 从零开始发布自己的NPM包

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan02 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  3. npm收录了哪些包_手把手教你制作一个小而美丽的 npm 包并发布

    第1步:npm账户 你需要一个 npm 账户,如果米有,注册地址是:npmjs.com/signup 第2步:登录 进入你自己电脑的终端(cmd)并输入: npm adduser 也可以使用以下命令: ...

  4. 与同事协作一起维护发布同一个npm包,报错You do not have permission to publish

    问题 在公司中与同事一起共同维护发布一个npm包(不同的npm账号共同维护同一个npm包),当我npm publish下一个版本的时候,出现报错,内容如下 npm ERR! code E403 npm ...

  5. npm 卸载_手把手教你创建一个NPM包

      前言   在前端,基于NodeJs的工程化开发已经是一个很成熟的解决方案,而工程化的构建又离不开诸多便捷又高效的可复用的NPM包,那么这些包是如何制作.发布的呢?今天我们就来研究一下这个问题.   ...

  6. 了解node.js模块化和npm包

    模块化-理解模块化 根目录 ├── index.html # 主页的页面 ├── index.js # 主页需要用到的js代码 │ └── getData() # 是index.js中定义的函数 └─ ...

  7. nodejs 之npm包

    1.npm常见三个命令 项目初始化   npm  init       (注意:不要起中文名字) 安装包      npm install 包名   可以简写为 npm i 包名 引入包,使用 补充知 ...

  8. 如何开发、本地测试、发布 Laravel 扩展包?Class ‘Angkee\Admin\AdminServiceProvider‘ not found

    在按照文档实践当中遇到错误.我修正一下. Class 'Angkee\Admin\AdminServiceProvider' not found 应该是这样的 "Angkee\Admin\& ...

  9. 发布一个持续集成的npm包并加上装逼小icon

    前言 随着入坑时间的增长,很多小伙伴在使用第三方轮子时不满足于下载xxx.js,script标签引入xxx.js,然后使用轮子的原始方式.想要高大上一点,于是小伙伴们跟npm邂逅了.后来有的小伙伴又想 ...

最新文章

  1. 赛迪顾问2010-2011年度中国信息安全产品市场研究年度报告
  2. SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]
  3. ASP.NET Core实现类库项目读取配置文件
  4. 大数据到底是不是“算命”?技术大牛们这样说
  5. java web教学大纲_《JAVAWEB程序设计》教学大纲.pdf
  6. Oracle11g创建表空间语句
  7. 使用 docker+tmux 加强容器调度
  8. Ubuntu16.04 ORB_SLAM2的安装教程
  9. python数据库操作批量sql执行_Python批量修改数据库执行Sql文件
  10. ubuntu之间传输文件
  11. N1刷Android TV,贫民种草指北 篇二:N1盒子:不谈刷机,只谈使用!
  12. DTU的工作原理是什么?DTU是怎样工作的?
  13. 康托尔悖论:大全集不存在,即包含一切集合的集合是否存在
  14. python 一,二维数据的个数化和处理
  15. 看看一位清华计算机专业的学生怎么看LINUX与WINDOWS的
  16. 仿朋友圈页面(超小白)
  17. 如何解决地图已加载却不能渲染的问题?
  18. 表中数据的更改量保存视图
  19. Proxifier设置代理上网详细操作
  20. 80核处理器_80多岁仍奋战一线,龙芯巾帼英雄黄令仪获CCF夏培肃奖

热门文章

  1. OOP 面向对象 七大原则 (一)
  2. 流程控制if、while、for
  3. Spring注解之 @EnableScheduling计划任务注解
  4. Java中的static关键字的用法
  5. 周记 2016.4.5
  6. Linux Ubuntu 自动登录
  7. JAVA环境变量的配置
  8. Redis源码分析 List实现
  9. HTTPS的七个神话(译文)
  10. linux下poll和epoll内核源代码剖析