最新版 vue 竟然给我硬盘文件都删除了!什么鬼??

2020-07-19 14:44:27 +08:00
 legendnan
今天想学习下 vue 。用 vue-cli 创建了一个项目。使用 vue ui 进行项目管理。
当使用 build 的时候 ,将我硬盘文件删除了。卧槽。
我在参数中将输出目录保存在了 H:\。其余没有改变。然后我点击运行,竟然自动将 h 盘下文件都删除了
11744 次点击
所在节点    Vue.js
114 条回复
chnwillliu
2020-07-19 19:48:58 +08:00
@reus 传统的编译型语言不存在编译后的目录上 CDN 的问题,前端的编译输出目录一般认为是可以直接拿来替换上一版本放在静态服务器或者 CDN 上的。有空我去试下 visual studio 下手动更改 C#项目 output 然后 build / rebuild 。
lingo
2020-07-19 19:51:00 +08:00
react 的官方脚手架难道 build 的时候就不清输出文件夹?
inwar
2020-07-19 19:53:07 +08:00
rm 也得加个 y 不是,感觉第一次设置为 build 目录应该得有个确认
hirasawayui
2020-07-19 19:53:31 +08:00
你真秀
Originalee
2020-07-19 19:56:24 +08:00
clean dist 目录感觉不能让 Vue 背锅吧
fakeshadow
2020-07-19 20:09:05 +08:00
防呆设计其实是很有必要的,毕竟大多人自己作出逗操作的时候反应不会是“我真白”,而是“神马垃圾设计”。
reus
2020-07-19 20:19:50 +08:00
@chnwillliu 即使有这个需求,也不是一定要清空目标目录。你可以想想,git push 是怎么处理不在版本管理里的文件的?忽略啊。前端同样可以这样处理,只处理自己生成出来的文件,而不是简单粗暴地全部清空。最简单的,加个索引文件,记录下某个版本包含哪些文件,就行了。
youxiachai
2020-07-19 21:26:54 +08:00
只能说,现在工程开发。。。有太多约定的东西。。。
往往对于那些,什么都不看,猛干的人来说,的确有点不太友好。。。
youxiachai
2020-07-19 21:28:54 +08:00
@reus 问就是没空搞。。。那么多需求要写,搞你这个得花多少时间,等写完,版本都迭代了不知道多少个版本了。。。诸如 npm 的依赖管理就是这样思想下的产物。
大家都会这么想,但是实际,实现,肯定走最省事的路子,比较浪费别人的时间,又不是自己的时间。
lingo
2020-07-19 21:57:10 +08:00
react 也是这么做的,然后 vue 就这么被批斗了一番。
懂的在解释原因。从浏览器缓存机制到 cdn 部署到 hash 的出现,这有一整条因果线。
不懂还在想当然地章口就莱。
love
2020-07-19 22:05:30 +08:00
@lingo react 虽然也清空但似乎不允许让你改默认输出目录,所以这是 Vue 功能做得太灵活背锅了哈哈,建议去掉这个选项写死目录
EPr2hh6LADQWqRVH
2020-07-19 22:11:03 +08:00
@vinsony
@will0404
@maichael

逗死我了真是夏虫不与语冰。
解决 CDN 缓存问题的方案又不只加后缀这一种,html 里加参数是不是也行啊?

加后缀的好处不就是不影响旧版本的使用,可以并存吗,
但问题来了,你 build 目录随时删,能测出多版本并存的实际行为吗?

每次删目录 => 因为每次产生的文件名不一样 => 因为需要不同版本文件共存 => 每次删除目录不保留之前版本?

前端肤浅浮躁成这样还说不得了? 起码自己好好梳理一下吧
hyyy
2020-07-19 22:31:02 +08:00
只能说,国内对 vue 鄙视的群体还真不是少数,这种问题 Vue 都能被骂,并且还是些非前端职业的人,真替 Vue 不值。
hyyy
2020-07-19 22:34:42 +08:00
这标题取的,LZ 可以去 UC 新闻部报道去了。
byzf
2020-07-19 22:43:06 +08:00
em..

不怪 vue 吧,vue 毕竟是库,面向的是开发,不是面向小白的软件,本质上你自己要对自己敲下的每一个命令会发生什么有一定概念,并承担相应的责任。

你的期冀可能是 vue-cli 在即将清空目录时给一个提示, 并要求输入 yes,除非带上 -force 之类的参数。我个人认为有点强人所难。
jichangee
2020-07-19 22:43:36 +08:00
@avastms 加参数当然能清除缓存,但是会影响到正在使用旧版本的用户,因为文件被覆盖了,如果是 hash 方式就可以将影响降到最低
EPr2hh6LADQWqRVH
2020-07-19 22:47:20 +08:00
build 和 clean 没分开,做得不够到位,承认起来就这么难么,又不是你写的代码。

直接删目录不就是一个鲁莽懒散么,简单处理能用就行了。

这还没遇到把输出目录指到父级的,我删我自己?

上面也有其他人科普了,就是真正需要 build 的那种 c 系项目,很多是没有专门输出目录的,输出的东西就和源码放一起,从来见不到删目录这种行径,想要清理专门有一个 clean 过程,正好就是 build 的逆过程。正经 build 正经 clean 。

生成文件名带哈希后缀咋了,妨碍 clean 过程吗妨碍覆盖吗只能删目录吗?
一个正则匹配不就都解决了吗?
iamverylovely
2020-07-19 23:14:19 +08:00
@avastms 删目录确实不是个好选择,但如果只是单纯覆盖,那么你会发现会出现一大堆垃圾文件(当然通过编程能解决,只是很麻烦,Vue 用的是一种相对简单的方式吧),我通常的解决办法是,用一个名叫"filemanager-webpack-plugin"的插件,每次 build 后压缩为 zip,命名是时间戳+zip,这样就不会被删除东西了,这个东西吧,本身扩展很强,不一定什么都要他们去设计,自己也可以学着完善某些功能。
iamverylovely
2020-07-19 23:15:56 +08:00
@iamverylovely 回复自己算了~~最后说一句,我爱开源、支持开源,lz 哪天看不惯 vue 了,lz 自己去提交代码、lz 自己去完善这个开源项目。
will0404
2020-07-19 23:19:02 +08:00
@avastms 。。。。。。你真别回了,还“夏虫不可语冰”,我看的尴尬死了。

CDN 问题可以有一百种方式解决,可是当你专注于前端时你能做的就不多,拿你的例子来说,http 里可以加参数,可是你 build 出来的东西不一定由你来 host,懂?简单点,也别讨论哪种方法最好了,你给我找几个 js 文件名不含 hash 或者版本号的站点看看吧?

正确的 flow 是:每次产生新的文件=>本地开发时避免磁盘冗余每次删旧文件=>部署到生产时可以保留新版和旧版以便回归。

>> 你 build 目录随时删,能测出多版本并存的实际行为吗?
你这句话也是蛮无知和搞笑的,版本实际上应该由 git tag 管理,我切个 tag 再 build 可不就能测对应的版本了吗?为啥我需要把所有版本和中间修改生成的文件保存在我本地的 build 目录呢?

我也完全同意直接删目录不可取,更好的做法是删除前提示,或者缓存前几次的文件。

嘴洗干净再学人回帖好吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/691339

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX