扫一扫分享
npm 出品的下一代包管理器 ,能够更好处理 node package 的依赖关系
Tink 能做什么呢?那就是你不用再自己调用 Node 了,调用 Tink 就行,Tink 有一个名为 shell 的子命令,负责打包 Node,加些补丁,然后就可以生成一个叫 Virtual node_modules 的神奇产物了。
Virtual node_modules 有几大特性:
因为 Tink 是一个运行时包管理器,所以它基本上不再需要物理 Node 模块了,同时并不需要改动模块加载器或者包中的 api。包可以像往常一样访问文件系统,所以就能和之前的配置等细节完全兼容。
既然 Node 模块不存在了,那么文件都去哪儿了呢?Tink 把文件都保存在了类似 npm 那样的单一全局缓存里,然后通过哈希算法来清除所有重复数据。因为使用了哈希算法,所以 Tink 不用再存储重复的内容。就算你的一个项目有 5 个历史版本,Tink 也只会存储原始版本和每次更新的内容,大大节约了存储空间,同时优化了数据读写的性能表现。
既然现在包管理集成到了运行时中,那么当你需要依赖项的时候就不用再手动获取了,Tink 会自动根据需要下载所需的依赖项,完全不用你再操心了。你不需要的依赖项它也不会下载,你需要的依赖项它都能预先下载好。Tink 还设置了一种机制,防止管理器随机下载一些其实你用不到的内容。
这也就意味着你不用再操心 npm 包安装流程了。你只需要 Tink Add、Tink Move 就能安装、卸载包,后面有什么过程都会自动完成。如果你的同事推上来什么内容,你只需要拉下来就可以直接运行,具体的细节 Tink 都为你打点好了。这可是一项巨大的改进,值得掌声鼓励。
有人可能会担心,把 fs 也打包起来不是很危险吗?其实我们不觉得这有什么,因为 Electron 就是这么干的!他们在这方面很有一套,我们也会学习他们的经验,所以这并不是什么大问题。其实 Tink 的一些相关代码就是直接从 Electron 过来的,我还做了一些调整和改进。
除了上面提到的这些,Tink 还带来了其他一些很棒的特性,包括:
作为运行时包管理器,Tink 直接提供了对 TypeScript 、ESM、Wasm 和 JX 的支持!
Tink 从全局缓存中加载依赖文件时会实时做校验,大大提升了安全性。
运行 Tink 时,如果你缺少某些依赖项,或者缓存中的某个文件已经损坏,那么 Tink 会自动为你下载并安装这些文件,自动修复你的依赖项。在生产流程中可以关闭这个选项,但在项目开发过程中这个功能非常方便,我也很喜欢它。
最后也是我最喜欢的特性:所有这些功能都是开箱即用的,无需专门配置,也用不着额外安装任何内容。这里要强调一下,所有这些特性都不需要任何类型的加载器,不需要额外的调整选项;webpack 之类的内容都能直接使用。你需要做的只不过是安装并运行 Tink,然后一切就自动部署妥当了。
手机预览