vue.js - 通过 Vue Router 渲染 html 文件
问题描述
我正在尝试使用 Vue 路由器来呈现 HTML 部分文件。我可以很好地渲染 vue 实例,但是当我尝试切换到我的第一个 HTML 文件时,我得到了错误。
[Vue 警告]:您正在使用仅运行时构建的 Vue,其中模板编译器不可用。要么将模板预编译为渲染函数,要么使用包含编译器的构建。
我之前在尝试初始化 Vue 实例时已经看到了这一点,但这是我尝试启动路由的时候。感谢您的任何帮助,您可以提供。
import Vue from 'vue'
import router from '@/components/elements/router'
import Elements from '@/components/elements/elements'
// eslint-disable-next-line no-new
new Vue({
router,
el: '#elements',
render: h => h(Elements)
})
routes/index.js
:
import Vue from 'vue'
import VueRouter from 'vue-router'
import Routes from './routes'
// Initialize Vue Router
Vue.use(VueRouter)
export default new VueRouter({
mode: 'history',
routes: Routes
})
routes/routes.js
:
import Typography from '@/html/global/partials/typography.html'
const Routes = [
{
path: '/',
redirect: '/home'
},
{
path: '/typography',
name: 'Typography',
mode: history,
component: { template: Typography }
}
]
export default Routes
elements.vue
:
<template>
<div id="elements-library">
<Nav />
<router-view />
</div>
</template>
<script>
import Nav from '@/components/elements/partials/nav'
export default {
name: 'elements',
components: {
Nav
},
}
</script>
nav.vue
:
<template>
<nav id="elements-nav">
<router-link to="/typography">Typography</router-link>
</nav>
</template>
<script>
export default {
name: 'elements',
}
</script>
Webpack.config
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
let __root = path.join(__dirname, '../')
let __src = path.join(__dirname, '../src')
let __dist = path.join(__dirname, '../dist')
module.exports = {
context: __src,
devtool: 'source-map',
entry: {
elements: './js/elements/elements.js'
},
output: {
path: path.resolve(__dist),
filename: 'js/[name].js',
chunkFilename: 'js/[name].chunk.js',
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
scss: ['vue-style-loader', 'css-loader', 'sass-loader']
}
}
},
{
test: /\.html$/,
use: [{
loader: 'html-loader',
options: {
minimize: true,
removeComments: false,
collapseWhitespace: false,
removeAttributeQuotes: false
}
}]
},
{
test: /\.(gif|png|jp(e*)g)$/,
use: [{
loader: 'file-loader',
options: {
name: '[path][name].[ext]',
publicPath: '../'
}
}]
},
{
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
use: [{
loader: 'file-loader',
options: {
name: 'fonts/[name].[ext]',
publicPath: '../' // override the default path
}
}]
}
]
},
plugins: [
new VueLoaderPlugin(),
new MiniCssExtractPlugin({
filename: 'css/[name].css',
chunkFilename: 'css/[name].css'
}),
new HtmlWebpackPlugin({
template: 'html/elements.html',
filename: 'index.html',
inject: false
}),
],
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'@': path.resolve(__src),
Vue: 'vue/dist/vue.esm.js'
}
}
}
解决方案
使用@Javas 上面的评论,我可以通过添加到我的 webpack.config 文件来让它工作
resolve: { alias: { 'vue$': 'vue/dist/vue.esm.js' } }
并更改对象的模板部分
{
path: '/typography',
name: 'Typography',
component: { template: `<div id="elem-typography"> ${Typography} </div>` }
}
推荐阅读
- python - 在迭代器未完全耗尽时获取 StopIteration 异常
- r - 在 str_replace 中使用 ascii
- parsing - 获取响应时出现 Groovy 错误:groovyx.net.http.HTTPBuilder handleResponse WARNING: Error parsing 'text/html' response groovy.json.JsonException
- javascript - 如何在 TypeScript 中访问接口的底层原始字段?
- python - 迭代到字典中的列表
- ansible - 从 Bitbucket 触发 ansible 作业
- flash - 从 Adobe Animate 中打开的 FLA 文件中导出所有项目
- sql - 在 SQL 中只返回 false 值
- lisp - lisp 更新列表函数
- postgresql - 如何在具有一列作为 json 值的 postgres db 中进行查询