教你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 相关文章推荐
由document.body和document.documentElement想到的
Apr 13 Javascript
合并table相同单元格的jquery插件分享(很精简)
Jun 20 Javascript
javascript自适应宽度的瀑布流实现思路
Feb 20 Javascript
提示$ is not defined错误分析及解决
Apr 09 Javascript
JS常用正则表达式总结
Nov 12 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
May 13 jQuery
Node.js环境下Koa2添加travis ci持续集成工具的方法
Jun 19 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
iView框架问题整理小结
Oct 16 Javascript
小程序自定义日历效果
Dec 29 Javascript
vue+element加入签名效果(移动端可用)
Jun 17 Javascript
node实现mock-plugin中间件的方法
Dec 25 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
ThinkPHP php 框架学习笔记
2009/10/30 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
ext for eclipse插件安装方法
2008/04/27 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
python聊天程序实例代码分享
2013/11/18 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
python实现神经网络感知器算法
2017/12/20 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
python实现的自动发送消息功能详解
2019/08/15 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
Python中os模块功能与用法详解
2020/02/26 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
python实现登录与注册系统
2020/11/30 Python
Python爬虫开发与项目实战
2020/12/16 Python
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
安全隐患整改报告
2014/11/06 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书