React Native安装依赖报EINVALIDPACKAGENAME错误如何解决
问题描述
执行npm install或yarn命令安装依赖时,抛出以下错误:
npm ERR! code EINVALIDPACKAGENAME npm ERR! Invalid package name "@types/react-navigation/native" of package "@types/react-navigation/native@^6.0.10": name can only contain URL-friendly characters.
无法直接删除"@types/react-navigation/native": "^6.0.10"依赖项,否则会触发其他报错,当前package.json配置如下:
{ "name": "projtest", "version": "1.0.0", "main": "node_modules/expo/AppEntry.js", "scripts": { "start": "expo start", "android": "expo start --android", "ios": "expo start --ios", "web": "expo start --web", "eject": "expo eject" }, "dependencies": { "@react-native-community/masked-view": "^0.1.11", "@react-navigation/native": "^6.0.10", "@react-navigation/native-stack": "^6.6.2", "@react-navigation/stack": "^6.2.1", "axios": "^0.27.2", "expo": "~45.0.0", "expo-av": "~11.2.3", "expo-cli": "^5.4.3", "expo-constants": "^13.1.1", "expo-linear-gradient": "~11.3.0", "expo-linking": "^3.1.0", "expo-status-bar": "~1.3.0", "react": "17.0.2", "react-color": "^2.19.3", "react-dom": "17.0.2", "react-native": "0.68.1", "react-native-elements": "^3.4.2", "react-native-gesture-handler": "~2.2.1", "react-native-reanimated": "~2.8.0", "react-native-safe-area-context": "^4.2.5", "react-native-screens": "^3.13.1", "react-native-video": "^5.2.0", "react-native-web": "0.17.7", "react-native-web-webview": "^1.0.2", "react-native-webview": "^11.18.2" }, "devDependencies": { "@babel/core": "^7.12.9", "@types/react": "~17.0.21", "@types/react-navigation/native": "^6.0.10", "@types/react-native": "^0.66.18", "typescript": "~4.3.5" }, "private": true }
问题根因
报错核心原因是依赖名不符合npm包命名规则:npm的scoped包格式固定为@[scope]/[package-name],包名部分不允许出现斜杠。你写的@types/react-navigation/native相当于在@types作用域下,包名是react-navigation/native,带斜杠属于非法命名,安装会直接失败。
另外担心删除这个依赖会报错是多余的:项目中安装的@react-navigation/native@6.x版本从发布起就内置了完整的TypeScript类型定义,根本不需要额外安装第三方@types类型包,你写的这个依赖本身就是命名错误的无效包,不存在“删除后缺类型”的问题。
解决步骤
- 打开
package.json,找到devDependencies节点下的"@types/react-navigation/native": "^6.0.10"这一行,直接删除。 - 清理安装残留:删除项目根目录下的
node_modules文件夹,用npm就删除package-lock.json,用yarn就删除yarn.lock。 - 重新执行安装命令:
- 使用npm执行:
npm install - 使用yarn执行:
yarn install
- 使用npm执行:
操作完成后依赖即可正常安装,TS类型也可以正常识别,不会出现删除依赖后的关联报错。
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

