码迷,mamicode.com
首页 > 其他好文 > 详细

关于Laravel中使用Laravel-mix打包资源文件的一个坑

时间:2018-01-16 00:56:01      阅读:1941      评论:0      收藏:0      [点我收藏+]

标签:问题   tom   bind   空目录   issue   combine   manifest   on()   hub   

  今天在尝试把写了一周的项目用laravel-mix中的 mix.version() 命令生成版本化文件时,遇到了一个报错,大概长这样:

fs.js:675
    return binding.read(fd, buffer, offset, length, postion);
                          ^

Error: EISDIR: illegal operation on a directory, read 
    at Object.fs.readSync (fs.js:675:18)
    at .....

  一开始还以为哪里写错了,前后检查了几遍无果,配合错误提示分段排查,发现只要这句代码:

mix.copy(‘resources/assets/js/lib/editor.md‘,‘public/lib/editor.md‘);

存在就会导致报错。

  有趣的是:

  1.前一句mix.copy还跑得好好的。

  2.版本化的代码压缩和生成mix-manifest.json都被正确地执行了,但在那句copy未被执行。

  3.如果不执行版本化 mix.version() ,那句代码就跑得毫无问题。

  按照文档的说法,mix.copy仅仅是把一处资源文件复制到另一处,怎么会和mix.version扯上关系呢。

  虽然手动复制也能解决问题,但就它这么特殊总是令人不爽。

  Google给出的答案也很迷,有人提出是version的过程与copy的过程同时进行了导致的问题【https://github.com/JeffreyWay/laravel-mix/issues/852】,建议 mix.then( ()=>{ ...COPY CODE ... }) 解决,然而我试了并没有什么卵用。 mix在执行结束后,then内再对mix进行的操作就已经无效了。

  随后又在文档中发现一句 “The mix.version() will automatically version any compiled JavaScript, Sass/Less, or combined files. ” 。emmmm,似乎copy过去的内容哪怕没在HTML中被以{{ mix()}}的方式引用,也会被mix.version()盯上呢。

  最后,我决定把editor.md目录下的全部内容挨个审批,结果令人意外,哪怕editor.md是个空目录,它TM也会报错。这倒提醒了我,于是我试着修改了一下文件名到 “editor-md” --- >通过了。

  经过测试,似乎只有mix.copy()的源文件目录中不能出现 “ . ”,更深入的研究大概要翻version()源码了。

关于Laravel中使用Laravel-mix打包资源文件的一个坑

标签:问题   tom   bind   空目录   issue   combine   manifest   on()   hub   

原文地址:https://www.cnblogs.com/roay/p/8290249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!