vue - 源码探究 vue-cli 2 中 '/static'目录和 '/src/assert'目录区别

蹲街弑〆低调 提交于 2020-03-06 17:50:05

这里 vue cli 3 里面也大同小异,3 只是把 static 改成了 public

在这里插入图片描述

我们都知道 在 vue-cli2 中

  • /static - 放不需要“编译”的文件,因为最终会被复制到 /dist/static 目录 。
    如:放图片、视频、字体…
  • /src/assert - 放需要“编译”的文件
    如:放 js、css、vue、图片(需要压缩或转换格式)

但源码怎么做到的呢?下面看下一
在这里插入图片描述

# 指定 - 输出目录: /dist

默认是 输出到 /src/dist 目录下

(看下图)

输出目录,看 webpack 的 output path ,其值来自 config.build.assetsRoot
在这里插入图片描述

(下图)config/config 目录下指定
在这里插入图片描述

(下图)最终,就是 /dist

在这里插入图片描述

# 指定 - 静态资源文件名:static

在看 /static 目录 这个文件名,是在 assetsSubDirectory 属性,中被指定的

assetsSubDirectory 属性值 是一个拼接后缀,指定了存放静态资源目录名

vue-cli 2/config/index.js 指定了属性 assetsSubDirectory 的默认值 。

分两种情况, 生产环境开发环境

默认值 均为 static (下图)

生产环境
在这里插入图片描述
开发环境
在这里插入图片描述

(下图)
这个属性在 /build/utils.jsexportassetsPath(path) 方法使用,作为 assetsPath 的前缀

在这里插入图片描述

# 拷贝 - /static目录 到 /dist/static目录

(下图)无论 是开发环境或者生产环境,都会添加插件 CopyWebpackPlugin 用来复制 /static 目录文件

CopyWebpackPlugin 插件 两个属性: - 【webpack官方介绍】

  • from 从哪里复制
  • to 复制到哪里

明显,vue-cli(看下图)指定的是
从(from)绝对路径 /static,复制到(to) 前面讲到的 static 文件夹下
(因为也配置了output path ,所以,到(to)的完整路径时绝对路径 /dist/static

在这里插入图片描述

结论:关于 /static 目录

因此,放到 /static 目录下的文件,会被原封不动的拷贝到 /dist/static 目录下。
这样,我们可以直接使用,如:

<img src="/static/img/tabbar/home.svg">

在这里插入图片描述

# 指定:编译后的名字(或者目录)

let home = require('./assets/img/home.svg')

这种资源的请求,因为是用 webpackrequire 方法进行的请求。

所以,会经过 webpackloader ,如:file-loaderimg-loader...

/build/utils.jsexportassetsPath(path) 方法 在 /build/webpack.base.config.js 中被使用

url-loader 使用(下图)

匹配后缀

  • png、jpe?g、gif、svg - 图片
  • mp4、webm、ogg、mp3、wav、flax、aac - 视频
  • woff2..... - 字体

在这里插入图片描述

# url-loadder 的 limit 属性

重点,这个加载器这里有一个 limit 属性,这个属性是 webpack 定义的

查看 webpackurl-loadder 的使用 - 官方 webpack 文档

(下图)
在这里插入图片描述
(上图)

意思就是

# 结论:关于 /src/assets 目录

放在 /src/assets 目录的资源,会先被 webpack 匹配到的 loader 进行处理,处理后放到 /dist/static 相应的目录上 。

因此,适合放 js 、 css 、 vue、需要编译的其他东西(如需要压缩的图片)

# 官方建议【推荐⭐️⭐️⭐️】

在这里插入图片描述

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!