Oclif构建的CLI发布为tarball后,如何自动完成npm link无需手动操作?
解决Oclif CLI Tarball无需手动npm link即可使用的问题
我来帮你搞定这个问题——其实Oclif本身就有针对这种场景的解决方案,而且你的当前配置里有几个可以优化的地方,我一步步给你说:
首先,纠正一个认知:通过npm安装tarball不需要手动link
如果你的用户是用npm install -g ./galaxycli-0.11.0.tgz这种方式安装你的tarball,npm会自动帮你处理软链接,根本不需要用户手动执行npm link,也不需要你在postinstall脚本里加npm link。
你现在的postinstall脚本里写npm link其实会带来问题:比如用户在本地项目里安装你的CLI(非全局)时,这个脚本会强制把你的CLI全局链接,这不符合常规使用逻辑,甚至可能因为权限问题执行失败(比如用户没有全局npm目录的写入权限)。所以建议你删掉这个postinstall配置。
如果你想让用户直接解压tarball就能用(无需npm install)
这才是Oclif专门设计的场景,用它自带的打包工具生成自包含的可执行tarball,用户解压后直接就能运行galaxy命令,完全不需要npm相关操作。
具体操作步骤:
- 你已经在devDependencies里装了
@oclif/dev-cli,直接用它打包:oclif-dev pack:tarballs - 执行完这个命令后,项目根目录会生成
dist文件夹,里面包含你在package.json的oclif.node.targets里配置的平台(比如linux-x64、win32-x64)对应的tarball包。 - 用户下载对应的tarball解压后,就能在解压目录的
bin文件夹里找到可直接运行的galaxy命令(Windows下是galaxy.exe)。如果用户想全局使用,只需要把这个bin目录加到系统PATH里就行。
这个打包方式会把Node.js运行时和你的CLI代码打包在一起,用户甚至不需要自己装Node.js就能用,完全满足你不想让用户手动执行任何命令的需求。
补充说明
其实Oclif的官方文档里的发布流程是包含pack和pack:tarballs命令的,这些就是用来生成这种开箱即用的可执行包的,你可以再关注下打包相关的细节。
内容的提问来源于stack exchange,提问作者Albert Louzon
相关产品推荐
相关产品推荐

