找不到模块“@babel/preset-react”

Cannot find module '@babel/preset-react'

我试图在 heroku 上部署我的 reactjs rails 应用程序。

在出现此错误之前一切似乎都正常:

Module build failed (from ./node_modules/babel-loader/lib/index.js):
remote:        Error: Cannot find module '@babel/preset-react'

该应用程序在我的本地主机上运行良好。我尝试删除我的 node_modules 文件夹然后 运行 npm install 但错误仍然存​​在(仅当在 heroku 部署时)。

我的package.json:

{
  "name": "App",
  "private": true,
  "dependencies": {
    "@rails/webpacker": "5.4.0",
    "@types/react": "^17.0.18",
    "@types/react-dom": "^17.0.9",
    "babel-plugin-transform-react-remove-prop-types": "^0.4.24",
    "prop-types": "^15.7.2",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react_ujs": "^2.6.1",
    "webpack": "^4.46.0",
    "webpack-cli": "^3.3.12"
  },
  "devDependencies": {
    "@babel/plugin-syntax-jsx": "^7.14.5",
    "@babel/plugin-transform-react-jsx": "^7.14.9",
    "@babel/preset-env": "^7.15.0",
    "@babel/preset-react": "^7.14.5",
    "webpack-dev-server": "^3.11.2"
  }
}

Heroku 默认为 NODE_END=production。这对您的构建有何影响?

您在 devDependencies 中有 @babel/preset-react 个。当你npm i(或yarn)用NODE_ENV=production安装包时,npm(或yarn)只安装dependencies(它不会安装devDependencies)。

要解决这个问题,您可以 -

  • 要么覆盖 NODE_ENV。 ($ NODE_ENV=development npm i)
  • 运行 npm i --only=dev 构建之前

为了安全起见,当您 运行 在生产环境(在您的情况下为 Heroku)时,将 NODE_ENV 上的值恢复为生产。

我设法部署了它。我的回答基于这里:

我设置的是:

NPM_CONFIG_PRODUCTION= false 
YARN_PRODUCTION = false
YARN_CONFIG_PRODUCTION = false

我测试了更改 ENV 值,这对我有用。

这可以在配置变量下的 heroku 设置中设置