Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 是否可以将Vue.js模板编译为静态HTML和CSS文件?_Webpack_Vue.js - Fatal编程技术网

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

Webpack 是否可以将Vue.js模板编译为静态HTML和CSS文件?,webpack,vue.js,Webpack,Vue.js,最近我爱上了Vue.js。让组件的模板和样式彼此接近会更好,而且我发现我写的bug少了很多,现在可以很容易地将页面的一部分组件化并在多个地方使用它 我想知道我是否可以扩展这个单一文件组件结构来生成静态HTML页面,而不涉及Vue 例如,假设我想要一个页面,它有一个包含页眉、节和页脚的主“content”div。使用Vue.js,我可以创建“header”、“section”和“footer”组件,并在页面加载后使用JavaScript将它们实例化。因为页面的每个部分都在它自己的组件中,所以一个组

最近我爱上了Vue.js。让组件的模板和样式彼此接近会更好,而且我发现我写的bug少了很多,现在可以很容易地将页面的一部分组件化并在多个地方使用它

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

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

然而,这似乎有点浪费,因为这些组件实际上不是交互式的:我没有使用
v-model
v-bind
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文件。然后我可以在页面中包含生成的样式表,所有组件都将被设置样式

我已经看了和,但我不明白他们在做什么,因为我没有充分使用Webpack或Browserify


我想做的是可能的吗?

我想说你不能这样做,因为
Vue
使用一个虚拟DOM,它不会将模板编译成
HTML
,而是编译成JavaScript
呈现函数
,这是在数据更新时有效修补DOM所必需的


我相信,使用一点
节点
魔法来解析和输出文件是可以做到的,但这将是一个相当大的任务,因为它只会产生最小的影响。

来自vuejs官方指南:

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


您需要的是服务器端渲染。我建议您看看Nuxt.js

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

获得它非常简单。如果使用
vue cli

$ vue init nuxt/starter <project-name>
您可能主要关注的是
生成
,因为它

构建应用程序并将每个路由生成为HTML文件(已使用 用于静态宿主)


值得注意的另一件很酷的事情是,该项目似乎(在撰写本文时)非常成功,我们可以期待更多的优秀功能

有很多插件

为较小的项目安装Vue Meta。如果您只有几个静态页面,我建议您使用Vue meta,然后手动或使用预渲染服务为相同页面创建几个HTML文件

预渲染的问题是,它仅在某些设置中可用,如果您还没有理想的设置,需要重新构建它以优化Vue.js中的SEO和预渲染,则可能很难安装

为此,我建议如下:

对于小型应用程序:Vue Meta

npm安装vue meta--保存

对于具有动态渲染的中大型应用程序:

带SSR的nuxt.js(服务器端渲染):

有关如何使用nuxt.js和SSR构建web应用程序的更多信息,请参见YouTube上的视频搜索:


是的,我认为Vue.js本身并不是实现这一点的工具。只是我见过的唯一一个单文件组件是在Vue中,所以这是我的参考点。这就是我最终使用的。
"scripts": {
  "dev": "nuxt",
  "build": "nuxt build",
  "start": "nuxt start",
  "generate": "nuxt generate"
}