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

新手上路,请多包涵

最近迷上了 Vue.js 的 单文件组件。组件的模板和样式彼此接近要好得多,而且我发现我写的错误少了很多,因为很容易将页面的一部分组件化并在多个地方使用它。

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

例如,假设我想要一个包含主要“内容”div 的页面,其中包含标题、部分和页脚。使用 Vue.js,我可以创建“header”、“section”和“footer”组件,并使用 JavaScript 在页面加载后实例化它们。因为页面的每个部分都在其自己的组件中,所以一个组件中的 CSS 不可能影响另一个组件,而且我可以编辑更清晰的文件树。

但是,这似乎有点浪费,因为这些组件实际上并不是交互式的:我没有使用 v-modelv-bindv-on , I使用 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。

我正在尝试做的事情可能吗?

原文由 Ben S 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 908
2 个回答

您正在寻找的是服务器端渲染。我建议你看看 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"
}

您可能主要关注 generate ,因为它

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

另外值得注意的是,该项目似乎(在撰写本文时) 正在积极开发 中,我们可以期待更多强大的功能!

原文由 Sinisag 发布,翻译遵循 CC BY-SA 4.0 许可协议

来自官方的 vuejs 指南:

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

原文由 Rashad Saleh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题