可以使用包管理器自带的 ls
命令来查看项目里依赖的版本。
下面是一些基本的示例,详细用法请查看各个包管理器的文档。
npm / yarn
对于使用 npm 或 yarn 的项目,可以使用 npm ls
命令。
比如执行 npm ls @modern-js/core
,可以看到如下结果:
project
└─┬ @modern-js/app-tools@2.0.0
└── @modern-js/core@2.0.0
pnpm
对于使用 pnpm 的项目,可以使用 pnpm ls
命令。
比如执行 pnpm ls @modern-js/core --depth Infinity
,可以看到如下结果:
devDependencies:
@modern-js/app-tools 2.0.0
└── @modern-js/core 2.0.0
安装依赖时如果出现以下报错提示,说明当前环境使用的 Node.js 版本过低,需要升级 Node.js 到更高版本。
The engine "node" is incompatible with this module.
Expected version ">=14.17.6". Got "12.20.1"
使用 Modern.js 时,建议使用 Node.js 18.x 的最新版本。
如果当前环境的 Node.js 版本低于上述要求的版本,则可以使用 nvm 或 fnm 等工具进行版本切换。
下面是使用 nvm 的示例:
# 安装 Node.js v14
nvm install 14
# 切换到 Node 14
nvm use 14
# 将 Node 14 设置为默认版本
nvm default 14
在本地开发环境推荐使用 fnm,它的用法与 nvm 相似,但拥有比 nvm 更好的性能。
升级项目的依赖后,如果出现以下类型报错,说明项目中安装了错误的 @types/react
版本。
The types returned by 'render()' are incompatible between these types.
Type 'React.ReactNode' is not assignable to type 'import("/node_modules/@types/react/index").ReactNode'.
Type '{}' is not assignable to type 'ReactNode'.
出现这个问题的原因是 React 18 与 React 16/17 中的 ReactNode 类型定义不同,如果项目中出现多个不同 @types/react
版本,就会出现 ReactNode 类型冲突,导致以上报错。
解决方法为将项目中的 @types/react
和 @types/react-dom
锁定在统一的版本上,比如 v17
。
{
"@types/react": "^17",
"@types/react-dom": "^17"
}
关于锁定依赖版本的方法,请参考 锁定子依赖。
出现该警告的原因是,某些三方 npm 包声明的 peer dependencies 版本范围与 Modern.js 中安装的版本范围不一致。
绝大多数情况下,peer dependencies 的警告不会影响项目运行,不需要额外进行处理,请忽略相关 warning。
Modern.js 框架推荐使用的 React 版本为 >= 18.0.0,并且不同功能对 React 版本的要求有所不同。
在 Modern.js 未来的 major 版本中,我们会逐步移除对 React 16 和 React 17 的支持。因此,请尽快升级到 React 18 以上版本。
Type 'CliPlugin<{}, {}, {}, {}>' is not assignable to type 'CliPlugin<any, {}, {}, {}>'.
Types of property 'setup' are incompatible.
当你在使用 Modern.js 框架时配置文件出现以上报错,可能是由于 Modern.js 相关包的版本号未统一导致。可以通过 npx modern upgrade
命令对 modern.js 依赖进行升级和版本统一。
在 monorepo 中由于不同子项目所用的 Modern.js 框架版本不一致也可能出现以上问题。