Vue+;Express(NestJS)不可能完成的任务,您使用的是仅运行时构建的Vue,其中

Vue+;Express(NestJS)不可能完成的任务,您使用的是仅运行时构建的Vue,其中,express,vue.js,vuejs2,nestjs,server-side-rendering,Express,Vue.js,Vuejs2,Nestjs,Server Side Rendering,这使得我无法将Vue作为视图系统添加到名为Nest with Express的框架中 我没想到适应Vue这么复杂。这就是我在这里的原因,这样您就可以引导我走上正确的道路,而我不会直接使用Vue 首先是错误: [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into re

这使得我无法将Vue作为视图系统添加到名为Nest with Express的框架中

我没想到适应Vue这么复杂。这就是我在这里的原因,这样您就可以引导我走上正确的道路,而我不会直接使用Vue

首先是错误:

    [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.
(found in <Root>)
从“/app”导入{createApp}

import Vue from 'vue';

export function createApp(context: any) {
  return new Vue({
    data: context.data,
    template: fs.readFileSync('./index.html', 'utf-8'),
    components: context.components,
  }).$mount('#app');
}
我尝试创建一个基本模板,然后使用NestJS为每个控制器或路由添加组件

我不知道这是否可行,也不知道我是否被迫使用Webpack,因为我目前没有使用它


谢谢

谢天谢地,这不是一个复杂的问题

您正在尝试使用基于
.ts
文件的
运行时
构建,但无法使用。这是因为只有
*.vue
是预编译的

要解决此问题,只需在webpack中为vue创建一个别名:

resolve: {
  alias: {
    vue: 'vue/dist/vue.js'
  }
}

这将允许您访问模板编译器,允许您在未预编译的模板(读取:任何不以.Vue结尾的文件)中使用
Vue

Vue启动了整个站点,引导您完成服务器端渲染的启动和运行。这与在中概述的过程不同

完整的信息可以在以下位置找到:并在主指南中的标题“服务器端渲染”下的侧栏导航的一半处引用

以下是让您开始学习的要点:

npm install express --save

npm install vue vue-server-renderer --save
与服务器示例集成

const Vue = require('vue')
const server = require('express')()
const renderer = require('vue-server-renderer').createRenderer()

server.get('*', (req, res) => {
  const app = new Vue({
    data: {
      url: req.url
    },
    template: `<div>The visited URL is: {{ url }}</div>`
  })

  renderer.renderToString(app, (err, html) => {
    if (err) {
      res.status(500).end('Internal Server Error')
      return
    }
    res.end(`
      <!DOCTYPE html>
      <html lang="en">
        <head><title>Hello</title></head>
        <body>${html}</body>
      </html>
    `)
  })
})

server.listen(8080)
const Vue=require('Vue')
const server=require('express')()
const renderer=require('vue-server-renderer')。createRenderer()
server.get('*',(req,res)=>{
const app=新的Vue({
数据:{
url:req.url
},
模板:`访问的URL是:{{URL}}`
})
renderer.renderToString(应用程序,(错误,html)=>{
如果(错误){
res.status(500).end('内部服务器错误')
返回
}
res.end(`
你好
${html}
`)
})
})
服务器监听(8080)
呈现Vue实例

// Step 1: Create a Vue instance
const Vue = require('vue')
const app = new Vue({
  template: `<div>Hello World</div>`
})

// Step 2: Create a renderer
const renderer = require('vue-server-renderer').createRenderer()

// Step 3: Render the Vue instance to HTML
renderer.renderToString(app, (err, html) => {
  if (err) throw err
  console.log(html)
  // => <div data-server-rendered="true">Hello World</div>
})

// in 2.5.0+, returns a Promise if no callback is passed:
renderer.renderToString(app).then(html => {
  console.log(html)
}).catch(err => {
  console.error(err)
})
//步骤1:创建Vue实例
常量Vue=require('Vue')
const app=新的Vue({
模板:`你好,世界`
})
//步骤2:创建渲染器
const renderer=require('vue-server-renderer')。createRenderer()
//步骤3:将Vue实例呈现为HTML
renderer.renderToString(应用程序,(错误,html)=>{
如果(错误)抛出错误
console.log(html)
//=>你好,世界
})
//在2.5.0+中,如果未传递回调,则返回承诺:
renderer.renderToString(app).then(html=>{
console.log(html)
}).catch(错误=>{
控制台错误(err)
})

我认为将VUE直接添加到html中可能更好,但我可能会遇到与Express framework相同的问题。谢谢,但我已经遵循了这一点,我遇到的问题是我不能使用任何模板库,然后在controller中只注入组件。这不在文档中,我在谷歌上找不到任何东西。我不敢相信我终于做到了。谢谢,谢谢
// Step 1: Create a Vue instance
const Vue = require('vue')
const app = new Vue({
  template: `<div>Hello World</div>`
})

// Step 2: Create a renderer
const renderer = require('vue-server-renderer').createRenderer()

// Step 3: Render the Vue instance to HTML
renderer.renderToString(app, (err, html) => {
  if (err) throw err
  console.log(html)
  // => <div data-server-rendered="true">Hello World</div>
})

// in 2.5.0+, returns a Promise if no callback is passed:
renderer.renderToString(app).then(html => {
  console.log(html)
}).catch(err => {
  console.error(err)
})