一个项目升级 angular 之后遇到的问题,从 angular 15 升级至 angular 17,typescript 从 4.8 升级至 5.4.3
./node_modules/@cnblogs/markdown-it-presets/dist/es2015/presets/index.mjs:1:0-37 - Error: Module not found: Error: Can't resolve 'markdown-it'
对应的 index.mjs 第1行代码是
import MarkdownIt from 'markdown-it';
这里的 markdown-it 对应的 npm 是 @cnblogs/markdown-it
,是我们 fork markdown-it 仓库自己发布的 npm 包
终于定位到是下面的代码引起的,markdownItFactory
是在 @cnblogs/markdown-it-presets
中实现的
const html = markdownItFactory(
Object.assign({}, defaultOpt, { codeHighlight: false })
).render(source);
解析 dist/es2015/presets/index.mjs
是因为在 @cnblogs/markdown-it-presets
的 package.json 中有下面的配置
{
"exports": {
"./presets": {
"types": "./dist/types/presets/index.d.ts",
"require": "./dist/commonjs/presets/index.cjs",
"default": "./dist/es2015/presets/index.mjs"
}
}
}
终于解决了!出现 "Error: Module not found: Error: Can't resolve 'markdown-it'" 错误是由于缺少 @types/markdown-it
,但由于 https://q.cnblogs.com/q/148661 中的问题,还需要安装 markdown-it@13.0.2
,虽然项目中用的是 @cnblogs/markdown-it
,并没有用到 markdown-it
npm i @types/markdown-it
npm i markdown-it@13.0.2
为什么在 https://q.cnblogs.com/q/148661 之后会遇到这个问题?因为后来不再使用 markdown-it/lib/common/utils
中的 isString
,而项目中就这一个地方用到 markdown-it
,于是删除了 @types/markdown-it
与 markdown-it@13.0.2
等 @types/markdown-it@14.0.0
出来应该就不需要安装 markdown-it@13.0.2
在 tsconfig.json 中
– dudu 8个月前compilerOptions
之下添加"traceResolution": true
可以显示 module 解析日志@cnblogs/markdown-it-presets 采用的是这种方式 https://stackoverflow.com/a/72530967
– dudu 8个月前Module Resolution Strategies in TypeScript
– dudu 8个月前