一声叹息 一曲红殇 你像一束光 带着凛冽从历史中悠然走来 一柄长剑 一架古琴 划破这寂静岁月 弹奏出这荡气回肠的乐...
第四章 红绸 一声闷响,雪凛跪倒在地上,嘴边渗出血来。 “安敢如此!!!” 雪凛见那人脸色青白,正是盛怒之中,平时...
小时候,我就喜欢思考。思考很多事,很多人,总是可以带来意想不到的新奇、惊喜。 小学的时候,我是那么喜欢和其他人辩论...
点击上方“逆锋起笔”,公众号回复 PDF
领取大佬们推荐的学习资料
本文出自于掘金的子弈[1],感谢桃翁整理,原文链接 从零开始配置 TypeScript 项目[2]。以下是他的一些不错的作品,感兴趣的可以阅读:
面试分享:两年工作经验成功面试阿里 P6 总结[3]
在阿里我是如何当面试官的[4]
如果觉得不错希望能够在掘金关注、点赞哦~
本文是算法与 TypeScript 实现[5]中 TypeScript 项目整体的环境配置过程介绍。主要包括了以下一些配置内容:
如果你对以上的某些配置非常熟悉,则可以跳过阅读。如果你不清楚是否要继续阅读其中的一些配置信息,则可以通过工程问题来决定是否要继续阅读相关的内容。
算法与 TypeScript 实现[6] 关于当前配置的改造在 feat/framework[7] 分支上,希望刚兴趣的同学可以 star 一波。学习文档[8] 目前仍然是老版本的学习文档,之后会进行持续更新。
等。如果功能不能满足你的项目需求,你也可以基于这些工具进行团队的定制化改造,例如 ts-lib-scripts[12]。
希望你读完这篇文章能够了解以下一些问题(很有可能成为工程配置方面的面试题哦,细节决定成败):
在使用 Git 的时候如何规范 Git 的提交说明(Commit 信息)?
简述符合 Angular 规范的提交说明的结构组成?
在设计一些库包时如何生成版本日志?
TypeScript 如何自动生成库包的声明文件?
列举你知道的所有构建工具并说说这些工具的优缺点?这些构建工具在不同的场景下应该如何选型?
列举你所知道的 ESLint 功能?
如何确保构建和上传的代码无 ESLint 错误信息?
ESLint 和 Prettier 的区别是什么?两者在一起工作时会产生问题吗?
Linters 有哪两种类型的校验规则?
如何有效的识别 ESLint 和 Prettier 可能产生冲突的格式规则?如何解决此类规则冲突问题?
git hook 中客户端和服务端钩子各自用于什么作用?
git hook 中常用的钩子有哪些?
git hook 可以采用 Node 脚本进行设计吗?如何做到?
VS Code 配置中的用户和工作区有什么区别?
VS Code 的插件可以只对当前项目生效吗?
谈谈你所理解的 npm scripts,它有哪些功能?
你所知道的测试有哪些测试类型?
你所知道的测试框架有哪些?
什么是 e2e 测试?有哪些 e2e 的测试框架?
假设现在有一个插入排序算法,如何对该算法进行单元测试?
假设你自己实现的 React 或 Vue 的组件库要设计演示文档,你会如何设计?设计的文档需要实现哪些功能?
在设计工具库包的时候你是如何设计 API 文档的?
在通常的脚手架项目中进行热更新(hot module replacement)时如何做到 ESLint 实时打印校验错误信息?
你所知道的 CI / CD 工具有哪些?在项目中有接触过类似的流程吗?
CI 和 CD 的区别是什么?
除此之外如果你对其他相关的知识感兴趣(非本文相关的知识),希望你能额外深入去探索:
如何引入 ES Module 库包?在构建层面和包描述文件层面需要注意哪些方面?
谈谈你对 TypeScript 声明文件的理解?在制作库包时如何对外识别声明文件?在外部使用时有哪些好处?
在制作工具包的时候如何考虑按需引入和全量引入的优雅引入设计?
你知道哪些制作工具函数库的脚手架?
温馨提示:如果不知道什么是 CLI (命令行接口),可查看 使用 NPM 发布和使用 CLI 工具[30]。
Webpack 主要用于页面应用的模块化构建,使用 Webpack 构建会增加构建库的体积,因此简单工具库的制作使用 Webpack 完全是 "杀鸡用牛刀"。
由于算法的函数工具库功能非常单一简单,因此采用 TypeScript 官方推荐的 Gulp 工具进行构建即可满足需求。
温馨提示:更多构建工具可以了解 esbuild[40]、parcel[41]以及 backpack[42] 等。当然如果你想要更多了解这些构建工具的差异以及在什么项目环境下应该做如何选型,可以自行搜索前端构建工具的对比或差异,这里推荐一篇个人觉得总结不错的文章 前端构建:3 类 13 种热门工具的选型参考[43]。
如果对于测试的概念和框架不是特别清楚,这里推荐一些可查看的文章:
除此之外,如果想了解一些额外的测试技巧,这里推荐一些社区的最佳实践:
由于这里只是 Node 环境工具库包的单元测试,在对比了各个测试框架之后决定采用 Jest[101] 进行单元测试:
内置断言库可实现开箱即用(从 it
到 expect
, Jest 将整个工具包放在一个地方)
Jest 可以可靠地并行运行测试,并且为了让加速测试进程,Jest 会优先运行之前失败的测试用例
内置覆盖率报告,无需额外进行配置
温馨提示:前端测试框架很多,相比简单的单元测试,e2e 测试会更复杂一些(不管是测试框架的支持以及测试用例的设计)。之前使用过 Karma 测试管理工具配合 Mocha 进行浏览器环境测试,也使用过 PhantomJS 以及 Nightwatch(使用的都是皮毛),印象最深刻的是使用 testcafe[102] 测试框架(复杂的 API 官方文档),除此之外如果还感兴趣,也可以了解一下 cypress[103] 测试框架。
TypeScript[106])。由于本项目没有采用 Babel 进行转译,并且希望能够完美支持类型检查,因此采用 ts-jest[107] 进行单元测试。按照官方教程进行依赖安装和项目初始化:
# workflow 的执行仍然会受到一些限制,例如 # - 每个 job 最多执行 6 小时(本地机器不受限制) # - 并发 job 的数量会受到限制 # - push: 提交代码到特定分支时触发 # branches: 指定 push 触发的特定分支,这里你可以通过列表的形式指定多个分支 # 除此之外如果对于每个分支有不同的 webhook 触发,则可以通过以下形式进行多个 webhook 配置 # env: 用于设置环境变量 # cache 在这里主要用于缓存 npm,提升构建速率
dir 列出当前目录下的所有文件
cd 目录名 进入到指定的目录
md 目录名 创建一个文件夹
rd 目录名 删除一个文件夹
当我们在命令行窗口打开一个文件,或调用一个程序时,
系统会首先在当前目录下寻找文件程序,如果找到了则直接打开
如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止
所以我们可以将一些经常需要访问的程序和文件的路径添加到path中,
这样我们就可以在任意位置来访问这些文件和程序了
Node是对ES标准一个实现,Node也是一个JS引擎
通过Node可以使js代码在服务器端执行
Node仅仅对ES标准进行了实现,所以在Node中不包含DOM 和 BOM
Node可以在后台来编写服务器
Node编写服务器都是单线程的服务器
传统的服务器都是多线程的
Node的服务器单线程的
模块的标识就是模块的名字或路径
我们node通过模块的标识来寻找模块的
对于核心模块(npm中下载的模块),直接使用模块的名字对其进行引入
对于自定义的文件模块,需要通过文件的路径来对模块进行引入
路径可以是绝对路径,如果是相对路径必须以./或 …/开头
将多个模块组合为一个完整的功能,就是一个包
bin:二进制的可执行文件,一般都是一些工具包中才有
- file 要操作的文件的路径 - options 选项,可以对写入进行一些设置 - callback 当写入完成以后执行的函数
- path 要读取的文件的路径 data 读取到的数据,会返回一个Buffer