.vue格式的文件使用类似HTML的语法描述vue组件。每个.vue文件包含三种最基本的语言块:,
<template>
<div class="example">{{ msg }}</div>
</template>
<script>
export default {
data () {
return {
msg: 'Hello world!'
}
}
}
</script>
<style>
.example {
color: red;
}
</style>
vue-loader会解析这个文件中的每个语言块,然后传输到其它的loaders,最终输出到module.exports是vue组件的配置对象的CommonJS模块。
vue-loader通过指定语言块的lang属性支持css预编译、html编译模板等语言格式。如在组件的style块中使用sass
<style lang="sass"> /* write SASS! */ </style>
语言块
src 引入
如果你习惯将*.vue组件分割成多个文件,可以使用语言块的src属性把扩展文件引入到组件中。
<template src="./template.html"></template> <style src="./style.css"></style> <script src="./script.js"></script>
语法高亮
在编辑器中可以将*.vue文件作为HTML处理,实现语法高亮
使用 vue-cli
推荐vue-cli和vue-loader组合使用搭建项目
npm install -g vue-cli vue init webpack-simple hello-vue cd hello-vue npm install npm run dev # ready to go!
ES2015
当vue-loader在同一个项目中检测到babel-loader或者buble-loader的存在时,会用他们来处理*.vue文件中
<script>
import ComponentA from './ComponentA.vue'
import ComponentB from './ComponentB.vue'
export default {
components: {
ComponentA,
ComponentB
}
}
</script>
我们可以使用ES2015对象的简写来定义子组件,{ ComponentA }是{ ComponentA: ComponentA }的简写。vue将会自动把键转换为component-a,是以我们可以在中引入组件。
ES2015
*.vue文件的的内容会被编译进js渲染函数,经过 Buble等支持ES2015特性的自定义生成工具处理。所以我们可以使用Object shorthand properties 和 computed properties等ES2015特性。
<div :class="[{ active: active }, isButton ? prefix + '-button' : null]">
可以简写成:
<div :class="{ active, [`${prefix}-button`]: isButton }">
可以用buble自定义模板的特性支持
处理普通js文件
由于vue-loader只处理*.vue文件,需要在webpack的配置文件中配置babel-loader或者buble-loader来处理普通的js文件。vue-cli在项目中可以做这些事情。
在.babelrc文件中配置babel
局部css
当一个style标签带有scoped属性,它的css只应用于当前组件的元素。
<style scoped>
.example {
color: red;
}
</style>
<template>
<div class="example">hi</div>
</template>
转换为:
<style>
.example[_v-f3f3eg9] {
color: red;
}
</style>
<template>
<div class="example" _v-f3f3eg9>hi</div>
</template>
注:
1 . 在同一个组件可以包含局部和全局样式
<style> /* global styles */ </style> <style scoped> /* local styles */ </style>
CSS 模块化
英文教程
CSS Modules便于实现css模块化,vue-loader通过模仿css的scope提供了module来实现css模块化集成。
使用在
<style module>
.red {
color: red;
}
.bold {
font-weight: bold;
}
</style>
这样打开CSS Module模式,class对象会作为$style的属性注入到组件中,进而在中进行动态的类绑定
<template> <p :class="$style.red"> This should be red </p> </template>
style中的类作为被计算的属性,也可以在:class中使用数组或者对象语法
<template>
<div>
<p :class="{ [$style.red]: isRed }">
Am I red?
</p>
<p :class="[$style.red, $style.bold]">
Red and bold
</p>
</div>
</template>
或者在js中获取使用它
<script>
export default {
created () {
console.log(this.$style.red)
// -> "_1VyoJ-uZOjlOxP7jWUy19_0"
// an identifier generated based on filename and className.
}
}
</script>
自定义注入名
由于一个vue组件可以包含多个
<style module="a"> /* identifiers injected as $a */ </style> <style module="b"> /* identifiers injected as $b */ </style>
配置css-loader
用css-loader来处理CSS Modules,以下是css-loader对
{
modules: true,
importLoaders: true,
localIdentName: '[hash:base64]'
}
通过vue-loader的cssModules配置项定制css-loader
// wepback 1
vue: {
cssModules: {
// overwrite local ident name
localIdentName: '[path][name]---[local]---[hash:base64:5]',
// enable camelCase
camelCase: true
}
}
// webpack 2
module: {
rules: [
{
test: '\.vue$',
loader: 'vue',
options: {
cssModules: {
localIdentName: '[path][name]---[local]---[hash:base64:5]',
camelCase: true
}
}
}
]
}
PostCSS
任何vue-loader处理输出的css都经过PostCSS进行局部css重写,我们也可以增加PostCSS插件进行这些处理,如autoprefixer和 CSSNext。
Webpack 1.x用法:
// webpack.config.js
module.exports = {
// other configs...
vue: {
// use custom postcss plugins
postcss: [require('postcss-cssnext')()]
}
}
Webpack 2.x用法:
// webpack.config.js
module.exports = {
// other configs...
plugins: [
new webpack.LoaderOptionsPlugin({
vue: {
// use custom postcss plugins
postcss: [require('postcss-cssnext')()]
}
})
]
}
postcss也支持插件数组
postcss: {
plugins: [...], // list of plugins
options: {
parser: sugarss // use sugarss parser
}
}
热加载
热加载不只是修改文件后页面的刷新。修改某个.vue组件后,页面中这个组件的所有实例都会被替换而不重载页面,它还保存了应用的当前状态以及被替换的组件。
如果使用了vue-cli搭建项目,自带了热加载。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue-loader
# vue
# loader如何使用
# loader
# 原理
# 详解vue-loader在项目中是如何配置的
# vue2.0安装style/css loader的方法
# Vue2.0结合webuploader实现文件分片上传功能
# Vue的移动端多图上传插件vue-easy-uploader的示例代码
# vue webuploader 文件上传组件开发
# Vue上传组件vue Simple Uploader的用法示例
# Vue + Webpack + Vue-loader学习教程之相关配置篇
# Vue + Webpack + Vue-loader学习教程之功能介绍篇
# vue的.vue文件是怎么run起来的(vue-loader)
# 自定义
# 多个
# 我们可以
# 加载
# 可以使用
# 在中
# 转换为
# 如果你
# 使用了
# 选择器
# 也会
# 将会
# 最多
# 可以用
# 而不
# 这条
# 英文
# 在同一个
# 三种
# 重写
相关文章:
C#如何在一个XML文件中查找并替换文本内容
如何生成腾讯云建站专用兑换码?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
建站之星客服服务时间及联系方式如何?
太原网站制作公司有哪些,网约车营运证查询官网?
如何快速搭建高效WAP手机网站?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
平台云上自主建站:模板化设计与智能工具打造高效网站
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
Swift中swift中的switch 语句
香港服务器租用每月最低只需15元?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
网站好制作吗知乎,网站开发好学吗?有什么技巧?
广东企业建站网站优化与SEO营销核心策略指南
开心动漫网站制作软件下载,十分开心动画为何停播?
开封网站制作公司,网络用语开封是什么意思?
建站之星2.7模板快速切换与批量管理功能操作指南
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何用低价快速搭建高质量网站?
网站app免费制作软件,能免费看各大网站视频的手机app?
建站之星备案流程有哪些注意事项?
临沂网站制作企业,临沂第三中学官方网站?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
如何自定义建站之星模板颜色并下载新样式?
网站制作的步骤包括,正确网址格式怎么写?
C++时间戳转换成日期时间的步骤和示例代码
公司网站制作价格怎么算,公司办个官网需要多少钱?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
香港服务器部署网站为何提示未备案?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
建站主机选购指南:核心配置优化与品牌推荐方案
网站制作软件有哪些,制图软件有哪些?
制作电商网页,电商供应链怎么做?
如何在云主机上快速搭建网站?
招贴海报怎么做,什么是海报招贴?
如何通过虚拟主机快速搭建个人网站?
建站之星伪静态规则如何设置?
如何在局域网内绑定自建网站域名?
黑客如何通过漏洞一步步攻陷网站服务器?
高端建站如何打造兼具美学与转化的品牌官网?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
,怎么在广州志愿者网站注册?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
建站OpenVZ教程与优化策略:配置指南与性能提升
*请认真填写需求信息,我们会在24小时内与您取得联系。