Create-React-App 构建 - “未捕获的语法错误:意外的令牌 <”

IT技术 reactjs webpack jsx create-react-app
2021-04-11 09:48:49

我意识到这个问题已被问过多次,但对我来说没有任何效果......

我正在尝试创建create-react-app项目的静态构建,但出现以下错误:

Uncaught SyntaxError: Unexpected token <     1.ca81c833.chunk.js:1
Uncaught SyntaxError: Unexpected token <     main.7ced8661.chunk.js:1

由于这些文件被缩小,我不确定从哪里开始调试它们。

根据其他 SO 响应,以下是我尝试过的一些方法:

//Original index.html file, which gets included in the built file:
<script type="text/babel" src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js"></script>

//package.json
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",

//.babelrc file
{
  "presets": ["react", "es2015", "stage-1"]
}

不确定这是否相关,但我在我的快速服务器上有这个,我认为这是标准的:

if (process.env.NODE_ENV === "production") {

    app.use(express.static('client/built'));
    app.get("*", (req, res) => {
        res.sendFile(require('path')
            .resolve(__dirname, 'client', 'build', 'index.html'));
    })
}

假设它实际上是一个 JSX 问题,整个事情就非常令人困惑——不create-react-app应该自动处理 JSX 吗?

更新:我刚刚发布了这个问题,但已经有了相关的更新。我可以通过 pm2 通过运行静态地提供页面,pm2 serve build所以我认为问题可能出在我的服务器配置上。

6个回答

谢谢这对我帮助很大。只是想用来自具有相同解决方案的 Create-React-App 项目的示例添加到此:部署到 heroku 后,我收到了相同的错误。

Uncaught SyntaxError: Unexpected token < after serve -s build

对我来说,问题出在 packages.json 文件中。我给的“主页”参数不正确。将其更改为正确的 heroku URL 解决了该问题。

"homepage": "https://myapp.herokuapp.com/"

希望这个补充有帮助。

是的,我同意,你是一个绝对的传奇 :)
2021-05-26 09:48:49
你是绝对的传奇
2021-06-06 09:48:49
或者只是添加PUBLIC_URL=https://myapp.herokuapp.com/.env环境变量
2021-06-19 09:48:49

我最终在这里找到了答案:https : //github.com/facebook/create-react-app/issues/1812

我从上面修剪了完整的解决方案,但我改变了:

app.use(express.static('client/build'));
app.get("*", (req, res) => {
    res.sendFile(require('path')
        .resolve(__dirname, 'client', 'build', 'index.html'));
})

到:

const root = require('path').join(__dirname, 'client', 'build')
app.use(express.static(root));
app.get("*", (req, res) => {
    res.sendFile('index.html', { root });
})

第一个块不起作用对我来说绝对有点奇怪。我认为这与我的 React 项目中的相对链接有关,因为我确实收到了一个index.html文件传递到浏览器,尽管收到了错误。也许一个完全静态的文件可以与第一个块一起使用,但我很想知道这是否准确。

完美,谢谢!我的问题是我忘了包括app.use(express.static('client/build'));
2021-05-28 09:48:49
这个问题并没有假设我们使用哪个服务器。如果我有一个 .net 核心服务器怎么办?
2021-06-16 09:48:49

只需删除

“主页”:“您的应用网址”

从 package.json 修复它

所以当我确实需要从不同的子路径提供服务时,我该怎么办?这不是一个真正可以接受的解决方案。
2021-05-26 09:48:49
我在 package.json 中找不到主页,如果我在端口 5000 中托管站点,它可以工作,但在端口 4000 中不起作用
2021-05-28 09:48:49
你可以检查我的答案:)
2021-06-07 09:48:49
是的对我有用,虽然不完全理解为什么!
2021-06-13 09:48:49

"homepage": "app-url"从 package.json 中删除的缺失homepage在的package.json会认为它会在服务器的根目录托管,或者你将成为与构建serve -s build

是的,homepage当您要在服务器根目录的子目录中部署应用程序时,指定会很有帮助。

要将您的应用程序托管在名为 somedomain.net的 IIS上,并且您的解决方案已经有一个 Web API 项目。

  1. 您将使用主 Web 应用程序(即 somedomain.net)映射解决方案文件夹
  2. 您将从 IIS 将 Web API 项目转换为应用程序。
  3. 然后你会像 Web API 一样将 React App 的 build 文件夹转换为 web App
  4. 要使前端应用程序正常工作,请指定 "homepage": "somedomain.net/React-Project/Client-App/build"
我在 package.json 中找不到主页,如果我在端口 5000 中托管站点,它可以工作,但在端口 4000 中不起作用
2021-06-05 09:48:49
非常感谢,我花了很多时间来解决这个问题。
2021-06-11 09:48:49

我使用“npm run build”创建了react应用程序的构建版本。我有一个服务器(节点/快递)。我想在服务器端包含构建并部署到heroku。我所做的是将构建文件夹复制到服务器根文件夹并在服务器端启动文件中使用代码:

app.get('/*', function (req, res, next) {
    if (!req.path.includes('api'))
        res.sendFile(path.join(__dirname, 'build', 'index.html'));
    else next();
});

我遇到了同样的错误。所以我只是在开始时设置静态内容的路径:

var app = express();
//here below
app.use(express.static(path.join(__dirname, 'build')));

我的静态 index.html 运行良好,能够找到资源 css 和 js。