使用django-webpack-loader + vue-cli的最基本的配置
首先
这是在使用 django-webpack-loader + vue-cli 进行配置时,从启动到在 Heroku 上发布的备忘录。
django-webpack-loader 在 Django 的配置方面基本上按照 README.md#configuration 的说明进行,但在 webpack 的配置方面只有 webpack.config.js 的设置。
在本篇文章中,我将介绍有关如何在vue-cli中设置vue.config.js的配置以使其运作的内容。
版本
$ python --version
Python 3.7.11
$ vue --version
@vue/cli 4.5.13
Django = "^3.2.4"
django-webpack-loader = "^1.1.0"
"vue": "^3.0.0"
"webpack-bundle-tracker": "^1.1.0"
最低限度的设定
var BundleTracker = require('webpack-bundle-tracker');
module.exports = {
publicPath: process.env.NODE_ENV === 'production'
? '/static/dist/'
: 'http://localhost:8080/',
outputDir: 'static/dist',
configureWebpack: {
plugins: [
new BundleTracker({filename: './webpack-stats.json'}),
],
},
css: {
sourceMap: true,
},
devServer: {
headers: {
'Access-Control-Allow-Origin': '*',
},
},
}
项目说明
公共路径
publicPath: process.env.NODE_ENV === 'production'
? '/static/dist/'
: 'http://localhost:8080/'
除了本番环境之外,其余环境都是 http://localhost:8080/。
localhost:8080 是 devServer 的默认地址。
为什么不能使用 ‘/’?
如果在publicPath中省略HOST:PORT,那么Django静态文件的URL将如下所示:
http://localhost:8000/
localhost:8000是runserver的默认值。
换句话说,Django 会尝试寻找文件。
在开发过程中,并不会通过构建来生成静态文件,所以需要向 Vue 的 devServer 请求文件。因此,配置值为 http://localhost:8080/。
输出目录
outputDir: 'static/dist'
将django的settings.STATICFILES_DIRS指定为指定目录的值。
由于在本次设置中指定了 settings.STATICFILES_DIRS=[‘static’],因此会将 yarn build 的输出指定为 static/ 下的 dist 目录。
配置Webpack
configureWebpack: {
plugins: [
new BundleTracker({filename: './webpack-stats.json'}),
],
}
使用django-webpack-loader与webpack-bundle-tracker一起,下面是相应的配置。
在django的设置中,通过settings.WEBPACK_LOADER[“default”][“STATS_FILE”]来指定要引用的文件输出到哪里。
CSS源映射
css: {
sourceMap: true,
}
django-webpack-loader在寻找filename.css.map文件,但由于vue-cli的默认设置为禁用,因此会导致错误。
开发服务器的头部
devServer: {
headers: {
'Access-Control-Allow-Origin': '*',
},
}
为了启用热重载,需要这样做。当Vue端的源代码发生更改时,会尝试从localhost:8000(django)访问localhost:8080(Vue)的hot-update.json文件,但是在这个过程中会遇到CORS问题。为了解决这个问题,我们在devServer中指定了’Access-Control-Allow-Origin’: ‘*’。
最后
这次我会把试验用的源代码贴出来。
只是在尝试使用 django-webpack-loader + vue-cli,所以只生成了一个 django/vue 项目。
Github
https://github.com/tsukachu/django_vue
Github
https://github.com/tsukachu/django_vue