我已经找到方法了,首先需要禁用vue.config.js中的文件注入:
configureWebpack: config => {
config.plugins.forEach((plugin) => {
if(plugin.constructor.name === 'HtmlWebpackPlugin') {
plugin.options.inject = false;
plugin.options.minify.collapseWhitespace = false;
}
});
}
接下来需要使用下划线模板插入 js / css 文件。
在这里,我在文件名之前添加了vue,因为我使用 django 收集静态数据。
{% extends 'base.html' %}
{% load static %}
{% block header_extra %}
<% htmlWebpackPlugin.files.css.forEach((fileName) => { %>
<link rel="stylesheet" href="{% static 'vue<%= fileName %>' %}">
<% }) %>
{% endblock %}
{% block js_extra %}
<% htmlWebpackPlugin.files.js.forEach((fileName) => { %>
<script src="{% static 'vue<%= fileName %>' %}"></script>
<% }) %>
{% endblock %}
{% block main_content %}
<div id="app"></div>
<!--
<pre id="config">
<%= JSON.stringify(htmlWebpackPlugin, null, 2) %>
</pre>
-->
{% endblock %}
然后,由于我必须将静态收集到static/vue 目录,在 settings.py 我添加了一个新目录:
STATICFILES_DIRS = [
# vue is an additional subdirectory for vue static
('vue', os.path.join(BASE_DIR, '../frontend/dist')),
]
还需要从 django 访问 vue 生成的模板,所以在 settings.py 中:
TEMPLATES = [
# ...
# 'frontend' is the vue project directory name,
# so you should be able to specify template like this:
# template_name='dist/index.html'
{'DIRS': ['frontend']}
# ...
]