【发布时间】:2017-08-09 00:03:45
【问题描述】:
最近我爱上了 Vue.js 的 single file components。让组件的模板和样式彼此靠近会好得多,而且我发现我现在写的 bug 少了很多,因为组件化页面的一部分并在多个地方使用它非常容易。
我想知道是否可以在不涉及 Vue 的情况下扩展这个单文件组件结构以生成静态 HTML 页面。
例如,假设我想要一个页面,其中包含一个主要的“内容”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 文件。然后我可以在页面中包含生成的样式表,所有组件都将被设置样式。
我看过 vue-loader 和 vueify,但我不明白他们在做什么,因为我没有足够使用 Webpack 或 Browserify。
我正在尝试做的事情可能吗?
【问题讨论】: