gpt4 book ai didi

javascript - 错误: 'Uncaught SyntaxError: Unexpected token <' (Django + React + Webpack)

转载 作者:行者123 更新时间:2023-12-03 02:21:41 27 4
gpt4 key购买 nike

我正在关注this tutorial设置 Django 以使用 webpack 生成的包来提供模板。我已经按照教程中的方式进行了设置。然而问题是当我去localhost:8000时我得到Uncaught SyntaxError: Unexpected token <当我在 chrome devtools 中打开控制台时出现异常。除了reactjs 包之外,我放入模板文件中的其他 html 都会被渲染。我的文件夹结构如下:

.
├── djangoapp
│   ├── db.sqlite3
│   ├── djangoapp
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   ├── manage.py
│   ├── reactapp
│   │   └── static
│   │   ├── bundles
│   │   │   └── main-fdf4c969af981093661f.js
│   │   └── js
│   │   └── index.jsx
│   ├── requirements.txt
│   ├── templates
│   │   └── index.html
│   └── webpack-stats.json
├── package.json
├── package-lock.json
└── webpack.config.js

设置.py

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'webpack_loader'
]

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates"), ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

WEBPACK_LOADER = {
'DEFAULT': {
'BUNDLE_DIR_NAME': 'bundles/',
'STATS_FILE': os.path.join(BASE_DIR, 'webpack-stats.json'),
}
}

STATIC_URL = 'static/'

webpack.config.js

var path = require("path");
var webpack = require('webpack');
var BundleTracker = require('webpack-bundle-tracker');

module.exports = {
context: __dirname,

entry: './djangoapp/reactapp/static/js/index.jsx',

output: {
path: path.resolve('./djangoapp/reactapp/static/bundles/'),
filename: "[name]-[hash].js",
},

plugins: [
new BundleTracker({filename: './djangoapp/webpack-stats.json'}),
],

module: {
rules: [
{ test: /\.js$/, use: ['babel-loader'], exclude: /node_modules/},
{ test: /\.jsx$/, use: ['babel-loader'], exclude: /node_modules/}
]
},

resolve: {
modules: ['node_modules', 'bower_components'],
extensions: ['.js', '.jsx']
},


};

模板/index.html

{% load render_bundle from webpack_loader %}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Example</title>
</head>
<body>
<div id="react"></div>
{% render_bundle 'main' %}
</body>
</html>

.babelrc

{
"presets": ["babel-preset-env", "react"]
}

main-fdf4c969af981093661f.js 的第 1 行开头引发异常文件,位于 <!DOCTYPE html> 的开始标记上元素。我的猜测是浏览器需要 javascript 代码,但给出的是 html。另外,我不明白 Django 如何知道在哪里查找包,因为我没有指定 reactapp 的根目录(static/bundles 目录)。任何地方。

最佳答案

过了一段时间,我通过将以下代码添加到 settings.py 解决了这个问题.

STATICFILES_DIRS = [
('bundles', os.path.join(BASE_DIR, 'reactapp/bundles'))
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

我还必须更改STATIC_URL/static/ .

这就是它应该如何工作:

  • Webpack 生成 bundle 到 reactapp/bundles文件夹。
  • 当 Django 服务器运行时,它会扫描 reactapp/bundles 内的更改和每次新更改后,都会将该文件夹的内容复制到根 djangoapp/static/ STATIC_ROOT 定义的文件夹设置。
  • 之后STATIC_ROOT里面的文件可以通过浏览器访问STATIC_URL像这样:localhost:8000/static/bundles/<bundle> 。通常默认为 localhost:8000/static/<bundle>STATICFILES_DIRS 内元组的第一个元素明确告诉 Django 复制 static/bundles 中的内容目录。
  • Django 在提供页面时会自动生成静态文件的链接。

注意: STATIC_URL应在前面加上 /否则静态路径将被附加到当前页面链接而不是根目录。例如在/index上页面静态文件的链接将是 localhost:8000/index/static/...而不是localhost:8000/static ,这是错误的,会导致 404 not found .

关于javascript - 错误: 'Uncaught SyntaxError: Unexpected token <' (Django + React + Webpack),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49128992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com