使用create-react-app时如何单独为模板指定registry源
create-react-app 没有提供单独给模板指定registry的专属命令参数,但有两个低侵入的落地方案,完全可以实现「私有源拉内部模板、公网源拉常规依赖」的效果,不需要团队成员手动切全局源、也不用删lock文件重装:
方案1:用包管理器的scope规则绑定私有源(最推荐,体验最好)
CRA拉模板的逻辑完全遵循npm/yarn原生的源匹配规则,你可以先给团队内部的CRA模板统一加专属scope,比如模板包命名为@your-team/cra-template-internal——注意CRA要求模板包名必须带cra-template-前缀,带scope时初始化命令里写--template @your-team/internal即可。
单独给这个scope配置私有源就行,所有没匹配到这个scope的包,都会默认走全局配置的公网yarn源,配置命令:npm config set @your-team:registry 你的私有registry地址你可以把这行命令封装成一键执行的初始化脚本,团队成员第一次用之前跑一次就行,后续初始化项目不需要任何额外操作,这个配置是scope隔离的,不会影响其他项目装包。
方案2:临时源参数+模板内置源配置(零前置配置)
如果不想让成员做任何前置配置,可以直接把公网yarn源的配置写进CRA模板自带的.yarnrc/.npmrc文件里。
成员初始化项目的时候,只需要在npx命令上加临时源参数,指定拉CRA本体和模板的阶段走私有源:npx --registry=你的私有registry地址 create-react-app my-app --template internal这个参数是单次生效的,完全不会改本地全局源配置:npx执行阶段会从私有源拉create-react-app和模板包,等CRA解压完模板、开始装项目依赖的时候,会自动读取模板里内置的源配置,从公网yarn源拉剩下的所有依赖,全程不用手动调整任何配置。
避坑提醒:别用全局切源的方案,很容易污染成员本地其他项目的装包环境,上面两个方案都是配置隔离的,不会有这个问题。
内容的提问来源于stack exchange,提问作者wy1009

