嗯,有意思,我们来看看:
`yarn why`
❯ yarn why markdown-it
yarn why v1.22.10
[1/4] 🤔 为什么我们需要模块“markdown-it”……?
[2/4] 🚚 正在初始化依赖图……
[3/4] 🔍 正在查找依赖项……
[4/4] 🚡 正在计算文件大小……
=> 找到“markdown-it@13.0.1”
info 此模块存在的原因
- “_project_#discourse”依赖于它
- 从“_project_#discourse#markdown-it”提升
info 不含依赖项的磁盘大小:“732KB”
info 包含唯一依赖项的磁盘大小:“1.31MB”
info 包含传递性依赖项的磁盘大小:“1.31MB”
info 共享依赖项数量:5
=> 找到“ember-cli#markdown-it@12.0.4”
info 此模块存在是因为“_project_#discourse#ember-cli”依赖于它。
info 不含依赖项的磁盘大小:“724KB”
info 包含唯一依赖项的磁盘大小:“1.3MB”
info 包含传递性依赖项的磁盘大小:“1.3MB”
info 共享依赖项数量:5
=> 找到“markdown-it-terminal#markdown-it@8.4.2”
info 此模块存在是因为“_project_#discourse#ember-cli#markdown-it-terminal”依赖于它。
info 不含依赖项的磁盘大小:“708KB”
info 包含唯一依赖项的磁盘大小:“1.29MB”
info 包含传递性依赖项的磁盘大小:“1.29MB”
info 共享依赖项数量:5
✨ 完成于 0.39 秒。
因此,discourse 的 package.json 请求的是 13.0.1,ember-cli 自己的 package.json 请求的是 12.0.4,而 markdown-it-terminal 需要 8.4.2。
总之,理论上这一切都应该是不可见的。Discourse 本身请求的是 13.0.1,所以 app/assets/javascripts/node_modules/markdown-it 中的版本应该是 13.0.1。其他旧版本将提供给它们各自的父级。
鉴于我们没有在内部看到这种情况,而且这种情况只发生在安装不标准的用户的身上,我怀疑我们在双容器设置模板中遗漏了 yarn install,因此数据库容器启动时使用的是基础镜像中缓存的 markdown-it 版本 ![]()