执行yarn命令时报错Cannot find module: @babel/register如何解决?
electron-react-boilerplate 执行yarn操作报
Cannot find module: @babel/register错误解决 问题描述
使用electron-react-boilerplate项目时,所有yarn相关操作均抛出Cannot find module: @babel/register错误。
已尝试无效操作
- 执行
npm cache verify、npm cache clean -force、yarn cache clean清理缓存 - 删除
node-modules、package.lock.json、yarn.lock文件 - 检查
BabelRegister.js、webpack.config.eslint.js配置,未发现异常 - 确认项目中已安装@babel/register依赖
- 删除本地文件后重新克隆仓库,问题仍存在
- 执行
npm i安装依赖,卸载yarn后重新执行npm i -g yarn全局安装yarn,错误未解决
报错日志
yarn install报错日志
yarn install v1.22.11 [1/4] Resolving packages... success Already up-to-date. $ node -r @babel/register .erb/scripts/CheckNativeDep.js && electron-builder install-app-deps && yarn cross-env NODE_ENV=development webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.babel.js && opencollective-postinstall && yarn-deduplicate yarn.lock internal/modules/cjs/loader.js:892 throw err; ^ Error: Cannot find module '@babel/register' Require stack: - internal/preload at Function.Module._resolveFilename (internal/modules/cjs/loader.js:889:15) at Function.Module._load (internal/modules/cjs/loader.js:745:27) at Module.require (internal/modules/cjs/loader.js:961:19) at Module._preloadModules (internal/modules/cjs/loader.js:1231:12) at loadPreloadModules (internal/bootstrap/pre_execution.js:468:5) at prepareMainThreadExecution (internal/bootstrap/pre_execution.js:71:3) at internal/main/run_main_module.js:7:1 { code: 'MODULE_NOT_FOUND', requireStack: [ 'internal/preload' ] } error Command failed with exit code 1.
yarn add moment报错日志
yarn add v1.22.11 [1/4] Resolving packages... [2/4] Fetching packages... info fsevents@2.3.2: The platform "win32" is incompatible with this module. info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation. info dmg-license@1.0.9: The platform "win32" is incompatible with this module. info "dmg-license@1.0.9" is an optional dependency and failed compatibility check. Excluding it from installation. info iconv-corefoundation@1.1.6: The platform "win32" is incompatible with this module. info "iconv-corefoundation@1.1.6" is an optional dependency and failed compatibility check. Excluding it from installation. info fsevents@1.2.13: The platform "win32" is incompatible with this module. info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation. [3/4] Linking dependencies... warning " > slick-carousel@1.8.1" has unmet peer dependency "jquery@>=1.8.0". warning " > styled-components@5.3.0" has unmet peer dependency "react-is@>= 16.8.0". warning " > browserslist-config-erb@0.0.1" has incorrect peer dependency "electron@^7.0.0". warning " > enzyme-adapter-react-16@1.15.6" has incorrect peer dependency "react@^16.0.0-0". warning " > enzyme-adapter-react-16@1.15.6" has incorrect peer dependency "react-dom@^16.0.0-0". warning "enzyme-adapter-react-16 > enzyme-adapter-utils@1.14.0" has incorrect peer dependency "react@0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0". warning "enzyme-adapter-react-16 > react-test-renderer@16.14.0" has incorrect peer dependency "react@^16.14.0". warning "enzyme-adapter-react-16 > enzyme-adapter-utils > airbnb-prop-types@2.16.0" has incorrect peer dependency "react@^0.14 || ^15.0.0 || ^16.0.0-alpha". warning " > eslint-config-erb@2.0.0" has incorrect peer dependency "eslint-config-airbnb-typescript@^8.0.2". warning " > eslint-config-erb@2.0.0" has incorrect peer dependency "eslint-import-resolver-webpack@^0.12.2". warning " > eslint-config-erb@2.0.0" has incorrect peer dependency "eslint-plugin-jest@^23.13.2". warning " > eslint-config-erb@2.0.0" has incorrect peer dependency "eslint-plugin-jsx-a11y@6.2.3". warning " > eslint-config-erb@2.0.0" has unmet peer dependency "eslint-plugin-testcafe@^0.2.1". warning " > eslint-config-erb@2.0.0" has incorrect peer dependency "react@^16.13.1". [4/4] Building fresh packages... success Saved lockfile. success Saved 1 new dependency. info Direct dependencies └─ moment@2.29.1 info All dependencies └─ moment@2.29.1 $ node -r @babel/register .erb/scripts/CheckNativeDep.js && electron-builder install-app-deps && yarn cross-env NODE_ENV=development webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.babel.js && opencollective-postinstall && yarn-deduplicate yarn.lock internal/modules/cjs/loader.js:892 throw err; ^ Error: Cannot find module '@babel/register' Require stack: - internal/preload at Function.Module._resolveFilename (internal/modules/cjs/loader.js:889:15) at Function.Module._load (internal/modules/cjs/loader.js:745:27) at Module.require (internal/modules/cjs/loader.js:961:19) at Module._preloadModules (internal/modules/cjs/loader.js:1231:12) at loadPreloadModules (internal/bootstrap/pre_execution.js:468:5) at prepareMainThreadExecution (internal/bootstrap/pre_execution.js:71:3) at internal/main/run_main_module.js:7:1 { code: 'MODULE_NOT_FOUND', requireStack: [ 'internal/preload' ] } error Command failed with exit code 1.
根因说明
yarn执行操作后会触发项目配置的postinstall钩子,钩子中node -r @babel/register的写法是让node预加载@babel/register模块,此时node只会从全局模块路径查找依赖,不会读取项目本地的node_modules路径,因此即使项目本地已安装该依赖也会抛出找不到的错误。
解决方案
- 方案1:临时跳过脚本执行,完成安装后手动执行钩子命令
- 执行
yarn install --ignore-scripts跳过所有钩子脚本完成依赖安装 - 安装完成后手动执行postinstall完整命令:
node -r ./node_modules/@babel/register .erb/scripts/CheckNativeDep.js && electron-builder install-app-deps && yarn cross-env NODE_ENV=development webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.babel.js && opencollective-postinstall && yarn-deduplicate yarn.lock - 执行
- 方案2:修改postinstall脚本,补全模块路径
打开项目根目录的package.json文件,找到scripts下的postinstall字段,将开头的node -r @babel/register修改为node -r ./node_modules/@babel/register,修改后可正常执行所有yarn操作。 - 方案3:全局安装@babel/register依赖
执行npm i -g @babel/register,让node在预加载阶段可以从全局模块路径找到该依赖,即可解决问题。
内容的提问来源于stack exchange,提问作者yang
相关产品推荐
相关产品推荐

