教你30秒发布一个TypeScript包到NPM的方法步骤


Posted in Javascript onJuly 22, 2019

文章读译自The 30 second guide to publishing a typescript package to npm,部分内容有修改哈。

这篇文章要求你有一定的 JS 、TS 和 NPM 的知识,如果你写过普通的 NPM 包就更好啦~如果没有的话网上也很多教程的,都很简单~

发布过 npm 包的同学都知道,初始化一个 npm 项目,直接用 npm init -y 就可以了,那如果要用 ts 呢,直接 tsc --init 即可。这两个操作会生成 package.json 和 tsconfig.json 文件。然后我们按以下步骤修改一下配置:

1. 添加 "declaration": true 到你的 tsconfig.json

这行语句告诉 TypsScript 在编译的时候为你自动生成 d.ts 文件。需要注意的是,当你使用私有的类型时,但是这个类型也外部 API 的一部分,这个包的使用者就得不到该类型的类型推断,TS 编译器也会报警告,这时你只需要在该类型前添加 export 即可。

2. 添加 "types": "index.d.ts" 到你的 package.json

当其他人导入你的包的时候,这句话就告诉了 TS 编译器到哪里去寻找类型定义文件。这里的 .d.ts 文件和 main 入口指向的是一个文件夹,所以通常情况下,你的 package.json 会包含下面两行:

"main": "dist/index.js",
"types": "dist/index.d.ts"

(上面默认你在 tsconfig.json 中配置的 outDir 指向的是 dist 目录)

3. 保证你的 dist 目录被添加到了 .gitignore

在我们的代码仓库,一般不需要包含编译后的代码,只需要包含源码即可。所以我们不对 dist 目录做版本管理。并且这也不影响我们发布 dist 目录到 npm。

4. 运行构建命令

运行 tsc 即可编译所有的源码。这非常方便,通常情况下,我们可以添加一条命令到 package.json:

"build": "tsc"

5. 运行 npm publish

接下来就是要发布到 npm 了,在 package.json 添加以下命令:

"release": "tsc && npm publish"

笔者习惯使用 standard-version 配合 commitizen 来发布 npm 包,感兴趣的同学可以自行了解一下~

如果想要在发布前调试本地包,可以使用 npm link 命令,在此项目根目录执行npm link, 然后在要调试的 demo 项目中执行 npm link <your package name>,然后在代码中直接引入使用即可。

下面是完成配置后的 package.json:

{
  "name": "my-ts-lib",
  "version": "1.0.0",
  "description": "My npm package written in TS",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "scripts": {
    "build": "tsc",
    "release": "tsc && npm publish"
  },
  "author": "savokiss",
  "license": "MIT",
  "devDependencies": {
    "typescript": "^3.5.3"
  }
}

下面是最终的 tsconfig.json:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "lib": ["es2017", "es7", "es6", "dom"],
    "declaration": true,
    "outDir": "dist",
    "strict": true,
    "esModuleInterop": true
  },
  "exclude": ["node_modules", "dist"]
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery ajax提交表单数据的两种实现方法
Apr 29 Javascript
js字符编码函数区别分析
Dec 28 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
Jun 07 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
Jul 25 Javascript
微信小程序 教程之条件渲染
Oct 18 Javascript
微信小程序 页面跳转及数据传递详解
Mar 14 Javascript
Node.js+Express+MySql实现用户登录注册功能
Jul 10 Javascript
老生常谈js中的MVC
Jul 25 Javascript
bootstrap 路径导航 分页 进度条的实例代码
Aug 06 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 jQuery
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
详解vue为什么要求组件模板只能有一个根元素
Jul 22 #Javascript
微信小程序获取用户绑定手机号方法示例
Jul 21 #Javascript
Vue商品控件与购物车联动效果的实例代码
Jul 21 #Javascript
浅析Angular 实现一个repeat指令的方法
Jul 21 #Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 #Javascript
Vue中遍历数组的新方法实例详解
Jul 21 #Javascript
Vue项目中使用WebUploader实现文件上传的方法
Jul 21 #Javascript
You might like
一个简单的域名注册情况查询程序
2006/10/09 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
php rsa加密解密使用详解
2015/01/14 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
python自动zip压缩目录的方法
2015/06/28 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python实现ip代理池功能示例
2019/07/05 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
python和go语言的区别是什么
2020/07/20 Python
python 如何停止一个死循环的线程
2020/11/24 Python
啤酒销售实习自我鉴定
2013/09/24 职场文书
外语系毕业生找工作的求职信
2013/11/28 职场文书
车间班组长的职责
2013/12/13 职场文书
考试诚信承诺书
2014/05/23 职场文书
欢迎家长标语
2014/10/08 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书