Vue + Webpack + Vue-loader学习教程之相关配置篇


Posted in Javascript onMarch 14, 2017

前言

之前已经介绍过了Vue + Webpack + Vue-loader的相关功能介绍,大家可以点击这篇文章了解详情。下面就来看看相关配置篇,感兴趣的可以参考学习。

使用预处理器

在 Webpack 中,所有的预处理器需要和一个相应的加载器一同使用。vue-loader 允许你用其它的 Webpack 加载器去处理 Vue 组件一部分代码。它会根据 lang 属性自动用适当的加载器去处理。

CSS

例如,我们编译用 SASS 编译 <style> 标签:

npm install sass-loader node-sass --save-dev
<style lang="sass">
 /* 这里写一些 sass 代码 */
</style>

在引擎内,首先,<style> 标签内的内容会被 sass-loader 编译,然后再被进一步处理。

JavaScript

默认情况下,Vue 组件内的所有 JavaScript 会被 babel-loader 处理。当然,你也可以更改:

npm install coffee-loader --save-dev
<script lang="coffee">
 # 这里写一些 coffeescript!
</script>

Templates

处理模板的过程有点不同,因为大多 Webpack 模板加载器(比如 jade-loader )会返回一个模板处理函数,而不是被编译过的 HTML 字符串。我们只要安装 jade ,而不是 jade-loader :

npm install jade --save-dev
<template lang="jade">
div
 h1 Hello world!
</template>

重要提示: 如果你使用 vue-loader@<8.2.0, 你也需要安装 template-html-loader.

内联加载请求

在 lang 属性上,你能使用 Webpack loader requests :

<style lang="sass?outputStyle=expanded">
 /* use sass here with expanded output */
</style>

但是,注意这样只适用特定的 Webpack,并不兼容 Browserify 和 vueify。 如果你想让你的 Vue 组件发布成一个第三方组件的话,避免这样使用

URL资源处理

默认情况,vue-loader 是自动用 css-loader 和 Vue 组件编译器来处理样式和模板文件的。在处理过程中,所有的资源 URL 比如<img src="..."> , background: url(...) 和 CSS @import 都是被当做依赖的模块来处理。

例如,url(./image.png) 被转译成 require('./image.png')

<img src="../image.png">

如上会被再转译成:

createElement('img', { attrs: { src: require('../image.png') }})

因为 .png 并不是个 JavaScript 文件,你需要配置 Webpack 使用 file-loader 或者 url-loader 处理它们。项目脚手架工具 vue-cli 也能帮你配置这些。

这样做的好处是:

  1. file-loader 允许你指定在哪里复制和存放静态资源文件 ,以及用版本哈希值命名从而更好利用缓存。 这意味着,可以把图片放到 *.vue 文件旁边,可使用相对路径,而不需要担心发布时候的 URL。使用适当的配置,Webpack 在打包输出的时候,会自动把文件路径转为正确的 URL。
  2. url-loader 允许你内联 base-64 数据格式的URL资源,如果小于设定的阈值。这样可以减少 HTTP 请求小文件的数量。如果文件大于这个阈值。会自动it automatically falls back to file-loader.

加载器高级配置

若你想自定义载器的配置,不要 vue-loader 来推断。 或你只想覆盖加载器内置的配置。 那就这样做,在你 Webpack 配置文件里,添加一个 vue 块,并指定 loaders 选项:

Webpack 1.x Example:

// webpack.config.js
module.exports = {
 // other options...
 module: {
 loaders: [
  {
  test: /\.vue$/,
  loader: 'vue'
  }
 ]
 },
 // vue-loader 配置
 vue: {
 // ... 其他 vue 选项
 loaders: {
  // 用 coffee-loader 加载所有没有 "lang" 属性的 <script> 
  js: 'coffee',
  // 直接把 <template> 作为 HTML 字符串来加载,不需先用 vue-html-loader 处理。
  html: 'raw'
 }
 }
}

Webpack 2.x (^2.1.0-beta.25):

module.exports = {
 // 其他选项...
 module: {
 // module.rules 是和版本1.x中的 module.loaders 是相同的
 rules: [
  {
  test: /\.vue$/,
  loader: 'vue',
  // vue-loader 选项在这里配置
  options: {
   loaders: {
   // ...
   }
  }
  }
 ]
 }
}

这里是个实际的加载器配置高级用法的实例 提取组件内的 CSS 到单独文件。

提取CSS到单独文件

如下是提取所有程序的 Vue 组件中的 CSS 到一个单独的 CSS 文件的配置:

Webpack 1.x

npm install extract-text-webpack-plugin --save-dev
// webpack.config.js
var ExtractTextPlugin = require("extract-text-webpack-plugin")

module.exports = {
 // other options...
 module: {
 loaders: [
  {
  test: /\.vue$/,
  loader: 'vue'
  },
 ]
 },
 vue: {
 loaders: {
  css: ExtractTextPlugin.extract("css"),
  // 你也能包含 <style lang="less"> 或其他语言
  less: ExtractTextPlugin.extract("css!less")
 }
 },
 plugins: [
 new ExtractTextPlugin("style.css")
 ]
}

Webpack 2.x (^2.1.0-beta.25)

npm install extract-text-webpack-plugin@2.x --save-dev
// webpack.config.js
var ExtractTextPlugin = require("extract-text-webpack-plugin")

module.exports = {
 // 其他选项...
 module: {
 rules: [
  {
  test: /\.vue$/,
  loader: 'vue',
  options: {
   loaders: {
   css: ExtractTextPlugin.extract({
    loader: 'css-loader',
    fallbackLoader: 'vue-style-loader' // <- this is a dep of vue-loader, so no need to explicitly install if using npm3
   })
   }
  }
  }
 ]
 },
 plugins: [
 new ExtractTextPlugin("style.css")
 ]
}

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用JQuery调用Session的实现代码
Oct 29 Javascript
Jquery刷新页面背景图片随机变换的实现方法
Mar 15 Javascript
JavaScript中的函数嵌套使用
Jun 04 Javascript
第五章之BootStrap 栅格系统
Apr 25 Javascript
JS实现类似百叶窗下拉菜单效果
Dec 30 Javascript
数组Array的一些方法(总结)
Feb 17 Javascript
JavaScript中Array方法你该知道的正确打开方法
Sep 11 Javascript
bootstrap实现嵌套模态框的实例代码
Jan 10 Javascript
Vue.js实现立体计算器
Feb 22 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 Javascript
微信小程序自定义顶部组件customHeader的示例代码
Jun 03 Javascript
vue3为什么要用proxy替代defineProperty
Oct 19 Javascript
canvas实现刮刮卡效果
Mar 14 #Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
Mar 14 #Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
Mar 14 #Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 #Javascript
前端框架学习总结之Angular、React与Vue的比较详解
Mar 14 #Javascript
jQuery ajax实现省市县三级联动
Mar 07 #Javascript
Javascript前端经典的面试题及答案
Mar 14 #Javascript
You might like
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
基于python实现雪花算法过程详解
2019/11/16 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
一套VC试题
2015/01/23 面试题
数控技术学生的自我评价
2014/02/15 职场文书
购房意向书范本
2014/04/01 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
诉讼授权委托书
2014/10/15 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书