# ln -s node-v16.11.1-linux-x64/bin/npm /usr/bin/npm6然后npm6 -v果然就是V6版本了,npm6 run build打包成功!WRITING LOG · 03
技术博客
记录技术实践、问题排查和持续成长,把每一次解决问题的过程留下来。
WORKSPACE
文章阅读
npm打包时webpack.dev.conf.js报undefined SyntaxError: Unexpected token u in JSON at position 0
2021-10-29
今天准备给项目打包的时候发现npm不好使了,打包配置文件抛出个undefined然后是JSON解析错误,一调试发现prod.env.js里面的npm_config_argv变量取不到了。回想了一下昨天玩electron打包的时候升级了npm,然后npm -v一看是v8版本了,原本打包用的npm v6。那就得降级npm版本到6了,windows倒是直接下载安装包安装就好,linux下我想两个npm版本同时存在。linux下的解决方案:1、去下载nodejs包并解压得到node-v16.11.1-linux-x64。2、软连接下载的nodejs二进制文件里面的npm到/usr/bin/npm:
服务器报 -bash: cannot create temp file for here-document: No space left on device
2021-10-21
早上来同事跟我说我写的服务好像挂了,没数据。我去服务器看日志结果发现输入命令的时候tab命令补全报错:-bash: cannot create temp file for here-document: No space left on device字面意思看就是临时文件创建不了,没空间了。我赶紧用 df -h查看磁盘使用情况,明显磁盘占用还不到100%,那就是/tmp目录满了。清理了一下顺便去删了10多个G的历史日志,服务终于正常了。
laravel-admin诡异的页面缓存报错
2021-10-20
laravel-admin的古董页面很难看,新需求页面我采用模板文件引入vue然后后端增加API接口前后端分离的模式来做。结果碰到一个诡异的bug:运行一段时间后偶尔会报cache缓存目录不可读写的错误:
xxx/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php" line: xxxmessage: "file_put_contents(xxx/storage/framework/cache/data/8b/3e/8b3eed842170e75839a8ba3cb24ee506ddc0a065): failed to open stream: Permission denied然后接口加载不出任何数据。我看了下缓存目录是root组,但是有给读写权限,甚至尝试缓存目录权限全开chmod 777也无济于事。仔细查了一遍页面和接口都没有使用的缓存,这就很诡异了。最后临时用chown nginx storage -R 把目录分组归到nginx勉强能用。可是过了一段时间bug依旧会复现,因为缓存目录的文件有部分是定时任务以root身份生成的。后面自己查了下方法调用、缓存调用、页面逻辑,最后发现这个resources/views下的模板文件是xxx.php,而其他的模板文件都是xxx.blade.php,更名后好像又可以了。但是为了防止bug反复横跳我直接在项目根目录.env文件的CACHE_DRIVER配置项改为redis,不再使用文件缓存了。
linux下校验系统镜像ISO文件完整性
2021-10-20
在Linux盒子上下载了个deepin镜像做备份,家里网速不快下载好半天,早上来看文件的时候不太确定镜像文件是否完整。这时候可以用sha256sum 你的文件路径,比如校验根目录下的deepin-desktop-community-20.2.4-amd64.iso文件就是 sha256sum /deepin-desktop-community-20.2.4-amd64.iso 得到 224602f2d55593f01017cd997e0ea6e596b82dcba506d79e27fcfac1006a02b9 deepin-desktop-community-20.2.4-amd64.isoOK,得到sha256校验码跟官网能对上,说明文件没问题了!

关于scoket.io跨域问题
2021-10-15
最近想优化改造一下客服系统,重新拾起socket.io。写demo的时候发现websocket长连接发起的时候连不上服务器,查看控制台发现报cors跨域。这就有意思了,三四年前用并没有发现这个问题,上网一搜很多人都在问类似的问题。于是去官网看了下文档发现socket.io从v3版本开始就要求明确配置跨域参数否则默认不跨域。看来跟我一样不读文档就直接上手的大有人在。socket.io官网文档

关于谷歌chrome输入域名默认跳https的问题
2021-10-13
在本地测试项目的时候通过hosts伪造了几个本地域名,测试期间发现经常白屏。经查发现谷歌浏览器自动跳到了https,然后页面接口采用的http出现跨域问题。原来域名配置了ssl的时候输入域名访问会默认跳https,下面是解决办法:方法一:谷歌地址栏输入chrome://net-internals/#hsts在最后几行Delete domain security policies下面的Domain输入框输入禁止自动跳https的域名,然后点delete。
方法二:在nginx配置特殊地址或者参数重定向到80端口或者临时关闭ssl(不推荐)。
方法二:在nginx配置特殊地址或者参数重定向到80端口或者临时关闭ssl(不推荐)。