【发布时间】:2019-10-12 01:30:57
【问题描述】:
我正在使用 vue-cli 生成的项目,并在 vue.config.js 中指定了 pages。 Vue 会在 HTML 模板文件的末尾自动注入 JS 块。但是我需要指定一个不同的位置来将它们放在那个文件中。
标准 Webpack 语法并没有真正的帮助 (<%= htmlWebpackPlugin ...)。它实际上在那里注入了块,但是无论如何这些块再次插入到页面的末尾。
有没有正确的方法,如何在 HTML 文件中指定使用 vue-cli 构建的确切位置,而不是文件的默认结尾(或者在我的模板中不存在之前)?
模板 (IndexTemplate.cshtml)
...
<scripts-section>
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
<script src="<%= htmlWebpackPlugin.files.chunks[chunk].entry %>"></script><% } %>
</scripts-section>
生成的文件(Index.cshtml)
...
<scripts-section>
<script src="/dist/vue/runtime.js"></script>
<script src="/dist/vue/sentry.vendor.js"></script>
<script src="/dist/vue/axios.vendor.js"></script>
<script src="/dist/vue/vue.vendor.js"></script>
<script src="/dist/vue/vendors~Search.js"></script>
<script src="/dist/vue/Search.js"></script>
</scripts-section>
<script type="text/javascript" src="/dist/vue/runtime.js"></script><script type="text/javascript" src="/dist/vue/sentry.vendor.js"></script><script type="text/javascript" src="/dist/vue/axios.vendor.js"></script><script type="text/javascript" src="/dist/vue/vue.vendor.js"></script><script type="text/javascript" src="/dist/vue/vendors~Search.js"></script><script type="text/javascript" src="/dist/vue/Search.js"></script>
如您所见,它被插入了两次。将它放在文件末尾不是一个选项。
vue.config.js
module.exports = {
publicPath: '/dist/vue/',
outputDir: './wwwroot/dist/vue/',
runtimeCompiler: true,
pages: {
Search: {
entry: 'Frontend/vue/Search/main.ts',
template: 'Views/Mentors/IndexTemplate.cshtml',
filename: '../../../Views/Mentors/Index.cshtml',
chunks: ['runtime', 'vue.vendor', 'axios.vendor', 'sentry.vendor', 'Search', 'vendors~Search']
}
},
chainWebpack: config => {
config.optimization
.runtimeChunk('single')
.splitChunks({
chunks: 'all',
cacheGroups: {
vue: {
test: /[\\/]node_modules[\\/](.*vue.*)[\\/]/,
name: 'vue.vendor',
chunks: 'all',
},
// ...
}
});
}
}
我希望 JS 块只被注入到 <scripts-section> 元素中。
【问题讨论】: