是否可以将Vue.js模板编译为静态HTML和CSS文件?

最近,我爱上了Vue.js的单个文件组件组件的模板和样式彼此接近会更好,而且我发现我现在编写的bug更少了,因为很容易将页面的一部分组成并在多个位置使用它。

我想知道是否可以将这种单文件组件结构扩展到生成静态HTML页面,而不涉及Vue。

例如,假设我要创建一个页面,该页面具有一个主要的“内容” div,其中包含一个页眉,一个节和一个页脚。使用Vue.js,我可以创建“页眉”,“部分”和“页脚”组件,并使用JavaScript在页面加载后实例化它们。因为页面的每个部分都在其自己的组件中,所以一个组件中的CSS不会影响另一个组件,并且我有一个更加整洁的文件树可编辑。

但是,这似乎有点浪费,因为这些组件实际上不是交互式的:我没有使用v-modelor v-bind或or v-on,我只是使用Vue.js,因为它使我可以分离出页面的一部分。这也意味着如果禁用JavaScript,我的页面将根本无法工作,因为每个元素(保存主要内容div)都取决于Vue是否可用。

那么,有什么方法可以编译.vue文件,而不是编译到使用Vue.js在运行时加载这些组件的页面,而是将没有JavaScript呈现的HTML和CSS文件分开?

理想情况下,我有一个组件“ greeting.vue”:

<template>
    <p class="greeting">Hello!</p>
</template>
<style scoped>
    .greeting { color: red; }
</style>

在页面内使用:

<html>
    <body>
        <greeting></greeting>
    </body>
</html>

这些文件将被编译成两个文件:一个带有已编译和预渲染模板的HTML页面,以及一个包含所有组件样式的CSS文件。然后,我可以在页面中包含生成的样式表,然后对所有组件进行样式化。

我看过vue-loadervueify,但是由于我没有足够使用Webpack或Browserify,所以我不明白它们在做什么。

我想做的事可能吗?

2020/03/19 11:49:39

我会说您不能这样做,因为Vue使用虚拟DOM,它不会将模板编译HTML为JavaScript render functions而是将模板编译为JavaScript ,这是在更新数据时有效修补DOM所必需的。

我确信可以用一些node魔术来解析和输出文件来完成您想做的事情,但这对于只产生最小影响的事情来说将是一笔很大的工作。

小宇宙猪猪2020/03/19 11:49:39

您正在寻找的是服务器端渲染。我建议您看看Nuxt.js。

从VueJS文档:

正确配置生产就绪的服务器呈现的应用程序的所有讨论方面可能是一项艰巨的任务。幸运的是,有一个出色的社区项目旨在使所有这些变得更容易:Nuxt.js。Nuxt.js是基于Vue生态系统构建的高级框架,该框架为编写通用Vue应用程序提供了极其简化的开发体验。更好的是,您甚至可以将其用作静态站点生成器(页面被编写为单文件Vue组件)!我们强烈建议您尝试一下。

入门非常简单如果您使用vue-cli

$ vue init nuxt/starter <project-name>

它带有您通常需要的所有资源(Vuex,路由器等)。请记住,它强制执行某些文件夹结构,您必须遵循。

是启动器中包含的命令列表。

"scripts": {
  "dev": "nuxt",
  "build": "nuxt build",
  "start": "nuxt start",
  "generate": "nuxt generate"
}

你可能会被大部分iterested的generate,因为它

构建应用程序,并将每个路由生成为HTML文件(用于静态托管)。

还需要注意的很酷的事情是,该项目似乎(在撰写本文时)正在积极开发中,我们可以期待更多出色的功能!

斯丁Gil2020/03/19 11:49:39

从官方的vuejs指南:

如果您使用的是Webpack,则可以使用prerender-spa-plugin轻松添加预渲染它已经通过Vue应用程序进行了广泛的测试-实际上,创建者是Vue核心团队的成员。