在 vue-cli 3 初始化的项目根目录下面:和 src 同级有一个 public 目录

官网的说明如下:https://cli.vuejs.org/zh/guid...


在下列情况下使用: 你需要在构建输出中指定一个文件的名字。
你有上千个图片,需要动态引用它们的路径。
有些库可能和 webpack 不兼容,这时你除了将其用一个独立的 <script> 标签引入没有别的选择。

然后我们把一个文件 a.png 放置到它里面,不管打包还是 dev 起服务的时候,可以通过根目录访问

比如 build 的时候,最终 dist 目录的根目录就会出现一个 a.png。


所以很多人会把一些需要在根目录访问的文件多放置到它里面去

@vue/cli-service/lib/config/app.js 文件中有一段:

第一步:通过 api.resolve 获取当前 public 的目录:


// copy static assets in public/
const publicDir = api.resolve('public')

判断条件:比如最常见的是通过 fs.existsSync 来判断目录是否存在:


const fs = require('fs')
fs.existsSync(publicDir)

后面其实就和之前 2 版本里面的拷贝 src 到 dist 打包类似:

定义一个 copy 的 plugin,然后调用插件 copy-webpack-plugin,传入一些参数:

  • from 拷贝的源
  • to 拷贝的目的地
  • ignore 忽略一些文件

更多配置可以参考:https://github.com/webpack-co...

注意:这里的 to 的值 outputDir:

const outputDir = api.resolve(options.outputDir)


webpackConfig
.plugin('copy')
.use(require('copy-webpack-plugin'), [[{
from: publicDir,
to: outputDir,
ignore: publicCopyIgnore
}]])

可以用 vue inspect --plugin copy 查看


/* config.plugin('copy') */
new CopyWebpackPlugin(
[
{
from: '**/public',
to: '**/dist',
ignore: [...]
}
]
)

熟悉 vue-cli 老版本的同学可能会想,是不是和之前的 static 目录类似呢?

webpack.prod.conf.js 文件中:

用的也是插件 copy-webpack-plugin,只是这里拷贝的是 static 目录

也支持 3 个参数:

  • from
  • to
  • ignore

const CopyWebpackPlugin = require('copy-webpack-plugin')
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.build.assetsSubDirectory,
ignore: ['.*']
}
])

但是注意还是有区别的:

最终 build 之后,在 dist 目录里面不是根文件,默认会放置到 static 里面

配置文件在 config/index.js 里面

assetsSubDirectory: 'static'

扩展阅读:

来源:https://segmentfault.com/a/1190000016414534

[Vue CLI 3] public 目录没用吗的更多相关文章

  1. 【Vue CLI】从安装到构建项目再到目录结构的说明

    目录 1. 构建我们的项目 2. 目录结构说明 2.1 build目录 2.2 config目录 2.3 src目录 2.4 static目录 "Vue CLI是一个基于Vue.js进行快速 ...

  2. vue@cli3 public目录下的静态图片,如何使用在css类文件中(sass可行,纯css不行)

    之前写了一篇vue文件怎么使用的文章,有人问我怎么在css文件中使用public下的文件,这是个好问题,因为我之前都没有研究过 需要解决的2个问题 一开始按照vue文件的使用方式(https://ww ...

  3. vue@cli3 项目模板怎么使用public目录下的静态文件,找了好久都不对,郁闷!

    作为图片最好放在static目录下,但是vue@cli3没有static,网上都说放在public目录下,行,那就放吧,可问题是图片放了怎么使用 第一次尝试 肯定用绝对路径这就不说了,用相对路径,we ...

  4. Django + Vue cli 3.0 访问静态资源问题

    [问题背景] 用Vue clie 3.0的搭建得框架把我坑死了,在打包后,调用不到静态资源js,css,mp3等 [问题原因] vue cli 3.0打包后,dist目录下没有static目录,而Dj ...

  5. Vue CLI 3.0脚手架如何在本地配置mock数据

    前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...

  6. Vue CLI 3+tinymce 5富文本编辑器整合

    基于Vue CLI 3脚手架搭建的项目整合tinymce 5富文本编辑器,vue cli 2版本及tinymce 4版本参考:https://blog.csdn.net/liub37/article/ ...

  7. vue cli 3

    介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统 通过 @vue/cli 搭建交互式的项目脚手架. 通过 @vue/cli + @vue/cli-service-global 快 ...

  8. 用@vue/cli发布npm包

    1.环境准备 安装node,npm,@vue/cli 2.初始化项目 用@vue/cli创建新项目 vue create mtest-ui 删除public,main.js,App.vue等无关文件, ...

  9. Vue CLI 3.x 简单体验

    文档 中文文档 补充于02月10日 vue脚手架的3.x版本已经在开发中,现在还处于alpha版本.我们来看看有哪些变化. 使用 npm install -g @vue/cli 命名方式已经改为npm ...

随机推荐

  1. ssm项目 maven 项目pon.xml 配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. Df- Linux必学的60个命令

    1.作用 df命令用来检查文件系统的磁盘空间占用情况,使用权限是所有用户. 2.格式 df [options] 3.主要参数 -s:对每个Names参数只给出占用的数据块总数. -a:递归地显示指定目 ...

  3. 跟我一起学习webpack(一)

    跟我一起打包我们的第一个应用 第一步安装webpack 接下来我们新建文件 //add-content.js export default function(){ document.write('he ...

  4. JAXL连接Openfire发送房间消息

    使用composer形式安装的JAXL <?php require_once "vendor/autoload.php"; $client = new JAXL(array( ...

  5. mysql工具使用

    mysql -u user_name -p123456 -h host_name -P 3306 -D database_name -e "show full processlist;&qu ...

  6. Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  7. SpringMVC配置顺序的问题

    1:web.xml:web应用一经加载,先来找他         1):指明applicationContext的位置         2):引入spring监听,ContextLoaderListe ...

  8. PAT甲级——A1025 PAT Ranking

    Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...

  9. umask权限使用

    很显然,系统中各种文件的权限设置对特定用户的数据安全有很大影响.但是要求用户逐一明确设置系统中每个文件的权限也是不现实的,为此,需要使用umask命令,该命令可以为用户账号中新文件的创建进行缺省设置. ...

  10. Redis功能类

    <?phpnamespace org; /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防 ...