运行npx expo start --clear时出现.ts文件扩展名未知的TypeError错误求助
看起来你在启动Expo项目时碰到了一个挺闹心的错误——Node.js识别不了expo-modules-core里的.ts文件扩展名,我来给你分享几个经过验证的解决思路,应该能帮你搞定:
先明确下你遇到的错误场景
你执行npx expo start --clear后触发的错误日志如下:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for C:\Users\amine\student\node_modules\expo-modules-core\src\index.ts at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:219:9) at defaultGetFormat (node:internal/modules/esm/get_format:245:36) at defaultLoadSync (node:internal/modules/esm/load:177:14) at #loadAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:815:12) at #loadSync (node:internal/modules/esm/loader:837:49) at ModuleLoader.getModuleJobForRequire (node:internal/modules/esm/loader:476:38) at new ModuleJobSync (node:internal/modules/esm/module_job:344:34) at ModuleLoader.importSyncForRequire (node:internal/modules/esm/loader:424:11) at loadESMFromCJS (node:internal/modules/cjs/loader:1561:24) at Module._compile (node:internal/modules/cjs/loader:1712:5)
具体解决办法
第一步:检查Node.js版本是否兼容
Expo的不同SDK版本对Node.js版本有明确要求,比如SDK 49+推荐用Node.js 18.x或20.x的LTS版本。你可以先在终端输入node -v查看当前版本,如果版本过低(比如16.x及以下),很容易出现这类依赖编译的问题。
建议用nvm(Node版本管理器)来切换到兼容的LTS版本,避免全局升级带来的其他问题。第二步:彻底清理依赖并重装
依赖缓存或安装不完整是这类问题的常见诱因,按以下步骤操作:- 删除项目根目录下的
node_modules文件夹(Windows终端输入rmdir /s /q node_modules,Mac/Linux用rm -rf node_modules) - 删除
package-lock.json(如果用npm)或yarn.lock(如果用yarn)文件 - 重新安装依赖:
npm install(或yarn install) - 再次尝试启动项目:
npx expo start --clear
- 删除项目根目录下的
第三步:确保Expo SDK与expo-modules-core版本兼容
这个错误大概率是expo-modules-core的版本和你项目的Expo SDK版本不匹配导致的——依赖库没有被正确编译成JS,导致Node.js直接读到了TS源文件。
你可以打开package.json查看expo和expo-modules-core的版本,然后:- 运行
npx expo upgrade将Expo SDK升级到最新稳定版,它会自动同步更新所有兼容的依赖 - 或者手动安装和SDK匹配的
expo-modules-core版本,比如npm install expo-modules-core@<对应版本>
- 运行
第四步:调整TypeScript配置跳过库检查
给tsconfig.json添加skipLibCheck配置,让TypeScript跳过对第三方依赖库的类型检查,避免Node.js去解析依赖里的TS文件:
在compilerOptions里添加:"skipLibCheck": true第五步:尝试本地安装Expo CLI
全局的Expo CLI可能存在版本冲突,尝试在项目本地安装最新的Expo CLI:npm install --save-dev expo-cli之后再用
npx expo start --clear启动,npx会优先使用项目本地的CLI版本。
内容来源于stack exchange

