vue-loader与vue-cli3

vue-loader

查看文档
Vue Loader 是一个 webpack 的 loader(在vue-cli中已自动集成),以下功能都依赖于Vue Loader:

  • 单文件组件(.vue)
  • Sass语法
  • scoped功能
  • <style><template> 中引用的资源当作模块依赖来处理
  • 开发热重载
处理资源路径

当 Vue Loader 编译单文件组件中的 <template> 块时,它也会将所有遇到的资源 URL 转换为 webpack 模块请求。因此动态添加/更改的资源非绝对路径需要使用require处理。

<img src="../image.png">
<!-- 将会被编译为 -->
createElement('img', {
  attrs: {
    src: require('../image.png') // 现在这是一个模块的请求了
  }
})

默认下列标签/特性的组合会被转换,且这些组合时可以使用 transformAssetUrls 选项进行配置的。
( 如配置额外的 <style> 块使用 css-loader,也可以使 CSS 中的资源 URL 变成模块请求。)

{
  video: ['src', 'poster'],
  source: 'src',
  img: 'src',
  image: ['xlink:href', 'href'],
  use: ['xlink:href', 'href']
}
  • 转换规则
    • 如果路径是绝对路径或相对虚拟目录 (例如 /images/foo.png),会原样保留,不做处理。
    • 如果路径以 . 开头,将会被看作相对的模块依赖,并按照你的本地文件系统上的目录结构进行解析。
    • 如果路径以 @ 开头,也会被看作模块依赖。可通过 webpack.base.conf 配置给各种路径配置 alias。vue-cli 创建的项目都默认配置了将 @ 指向 /src
    • 如果路径以 ~ 开头,其后的部分将会被看作模块依赖。这意味着你可以将其视为相对路径./,也可以引用一个 node_modules中的资源:@import '~bootstrap-styl/bootstrap/index.styl';
  • 资源转模块方式
    • file-loader 允许指定要复制和放置资源文件的位置,并使用版本哈希命名以获得更好的缓存,且允许使用相对路径而不用担心部署时 URL 的问题。
    • url-loader 允许将文件转换为内联的 base-64 URL (当文件小于给定的阈值),这会减少小文件的 HTTP 请求数。如果文件大于该阈值,会自动的交给 file-loader 处理。
预处理器

Vue Loader 会根据 lang 特性以及你 webpack 配置中的规则自动推断出要使用的其他 loader。

Scoped CSS
  • scoped 通过使用 PostCSS 实现了以下转换:
<style scoped>
.example {
  color: red;
}
</style>
<template>
  <div class="example">hi</div>
</template>
<!-- 将会被编译为 -->
<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>
<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>
  • 父子组件关系
    使用 scoped 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件的 scoped CSS 和子组件的 scoped CSS 的影响。
    如果需要渗透到子组件,可以使用 >>> 操作符:
<style scoped>
.a >>> .b { /* ... */ }
</style>
<!-- 上述代码将会编译成:-->
.a[data-v-f3f3eg9] .b { /* ... */ }

有些预处理器对>>>不支持,此时可以使用 /deep/::v-deep 操作符取而代之——两者都是 >>> 的别名。

  • 通过 v-html 创建的 DOM 内容不受 scoped 样式影响,需通过深度作用选择器设置样式。
热重载
  • 当编辑一个组件的 <template> 时,这个组件实例将就地重新渲染,并保留当前所有的私有状态。能够做到这一点是因为模板被编译成了新的无副作用的渲染函数。
  • 当编辑一个组件的 <script> 时,这个组件实例将就地销毁并重新创建。(应用中其它组件的状态将会被保留) 是因为 <script> 可能包含带有副作用的生命周期钩子,所以将重新渲染替换为重新加载是必须的,这样做可以确保组件行为的一致性。这也意味着,如果你的组件带有全局副作用,则整个页面将会被重新加载。
  • <style> 会通过 vue-style-loader 自行热重载,所以它不会影响应用的状态。

vue-cli3

下载vue-cli3创建项目
npm install -g @vue/cli@3.0.0
vue create my-project (名称不能出现大写)

或直接

npx vue create my-vue-app
NODE_ENV获取环境变量
let env = app.get('env')
let env = process.env.NODE_ENV

可自行在 process.env 对象下定义需要使用的变量
一般约定 NODE_ENV 为环境变量名称
在项目中可以根据不同环境值进行差异化配置

Vue项目中使用

在vue-cli3构建的项目中,默认num run start环境值为development , num run build环境值为production,当需要其他环境时,可安装cross-env插件

npm install cross-env --save

并在package.json中进行如下配置

"test":"cross-env cross-env NODE_ENV=test  npm run build"

npm run test时,获取的环境值即为test

还需要NODE_ENV以外的环境变量(只能以VUE_APP开头),可以通过.env.XXX文件配合使用

配置文件

在根目录下创建vue.config.js中进行配置

  • 禁用打包后的sourceMap,防止源码泄露
productionSourceMap:false
  • 配置开发环境参数
  devServer: {
    port: 1881,//设置端口
  }
  • 导入公共scss文件
  css: {
    loaderOptions: {
      sass: {
        data: `@import "@/assets/styles/_variable.scss";`
      }
    }
  },
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容