教你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 相关文章推荐
一些常用的JS功能函数代码
Jun 23 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
Oct 20 Javascript
js的image onload事件使用遇到的问题
Jul 15 Javascript
一行命令搞定node.js 版本升级
Jul 20 Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
Nov 30 Javascript
浅析javaScript中的浅拷贝和深拷贝
Feb 15 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 jQuery
vue 挂载路由到头部导航的方法
Nov 13 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
Apr 19 Javascript
es6数组includes()用法实例分析
Apr 18 Javascript
详解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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php身份证号码检查类实例
2015/06/18 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
laravel5.6实现数值转换
2019/10/23 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
家电业务员岗位职责
2014/03/10 职场文书
国旗下演讲稿
2014/05/08 职场文书
护理目标管理责任书
2014/07/25 职场文书
信息合作协议书
2014/10/09 职场文书
机动车交通事故协议书
2015/01/29 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书