Collecting father doctor rules
有提案也欢迎按照追加评论,不需要写
key
收集 father doctor 命令计划考虑的 rules,持续更新:
Error Level
PACK_FILES_MISSING: 没把产物及源码中引入的目录配置到files字段中EFFECTS_IN_SIDE_EFFECTS:sideEffects配置有误,例如产物里有引入 css 却配置了false,或 rollup 不兼容的*.css配法PHANTOM_DEPS: 使用了某个依赖但却没在dependencies中声明,导致幽灵依赖- ~~
NOT_OWNER: 不是当前包的 owner,没有发布权限(未登录时不检查)~~(取消,只检查项目自身的问题) CASE_SENSITIVE_PATHS: 引入路径的文件大小写与磁盘上的大小写不符,作用于默认大小写不敏感的操作系统(比如 Windows 和 macOS)CJS_IMPORT_ESM: 在 cjs 产物中引入了 esm 依赖,这会导致发包实际运行时出现ERR_REQUIRE_ESM报错
Warning Level
PREFER_PACK_FILES: 建议指定files字段、减小 NPM 产物体积PREFER_NO_CSS_MODULES: 不建议使用 CSS Modules,使用者难以覆写样式,且会增加额外的编译成本PREFER_BABEL_RUNTIME: 建议安装@babel/runtme到dependencies,以节省产物大小(仅 babel transformer 下检查)DUP_IN_PEER_DEPS:peerDependencies和dependencies里有相同依赖- ~~
MISSING_REGISTRY: 检查registry是否符合预期~~(还没想好,有私有 npm 工具的存在不好实现) PREFER_PEER_DEPS: 有多实例风险的依赖应该放入peerDependencies,比如react、antd
有没有发包权限,算不算?
1、发包 registry 地址是否符合预期 2、发包前先检查下npm 是否包名重复?哈哈哈
PREFER_PACK_DEP_DUP: 检查 peerDependencies 和 dependencies 是否声明了相同依赖
npm scope 是不是配置了
"publishConfig": { "access": "public" }
私有包是否指定了 registry
"publishConfig": { "registry": "https://npm.private.com" }
之前有一个场景,一个类create-xxx cli工具 模版目录下有一个packages.json 发包的时候模版目录下的packages.json files 会与主项目packages.json files 冲突,导致发包的文件丢失。需要将模版目录下的packages.json 改名
这种场景 doctor 能监测吗
之前有一个场景,一个类create-xxx cli工具 模版目录下有一个packages.json 发包的时候模版目录下的packages.json files 会与主项目packages.json files 冲突,导致发包的文件丢失。需要将模版目录下的packages.json 改名
这种场景 doctor 能监测吗 我试了下两个package.json可以发布的,如果是打包移动文件把文件弄掉了那得去看打包流程

借鉴 https://publint.dev 的规则并转换成 father doctor 的 rule,源码:https://github.com/bluwy/publint/blob/master/pkg/src/message.js#L13
针对 exports.types 有一个专门的网站来检测兼容性,比较复杂。
https://github.com/arethetypeswrong/arethetypeswrong.github.io
针对
exports.types有一个专门的网站来检测兼容性,比较复杂
是指 CJS_IMPORT_ESM 这条规则吗,目前只打算覆盖引入了 pure esm 依赖但又输出了 cjs 产物的情况,避免实际运行时报错,所以实现上比较简单,在这个 PR 里 #623
这个 arethetypeswrong.github.io 是用来检测用户开发库时, exports 是否正确配置的。
背景
现在 TS 5 的 moduleResolution: 'bundler' / 'nodenext' 越来越流行,这个选项是专门为业务项目设计的,他会改变 TS 的类型读取行为,改为从 package.json#exports.types 读取(实际中还可能是更细致的条件入口,但类型都会从 exports.xxx.types 下面读),而不会从 package.json#types 读取 。
因为这个行为的改变,社区很多库都类型爆炸失效了,参考 这条 反馈,这是因为人们并不知道真正规范的 exports 是怎么配置的。
问题
关于 exports 的广泛性,现在绝大部分浏览器包都会有这个配置了,专门为现代打包工具使用(webpack5 、esbuild 等),但问题出在很多人都把他配错了。
如何解这个问题:
-
用 publint 可以检测到 exports 的配置错误。
-
用
arethetypeswrong.github.io可以检测exports.types是否正确配置,这是 publint 做不到的,而且是很关键的,因为一旦配错了,用户在 TS 里用这个库会类型完全爆炸。
综上,描述了 arethetypeswrong.github.io 的必要性,这个检测应该存在于用户开发时,配置了 package.json#exports 的场景。
描述了
arethetypeswrong.github.io的必要性
👍 get,感觉可以参考它拆一些 doctor 规则出来
我有两次发布意外删除或增加了很多文件,father doctor 要是能检测到多个文件被增加或删除就好了