SyraTi.ICU

霧雨魔法店 下属

前情提要

今天闲来无事,突然想起来之前在业务中看到的一个“能跑,但是不太合乎逻辑”的流程。

1
2
# 构建生产环境下的产物
NODE_ENV=production && npm install && npm run build

看起来一段非常简单的构建命令,实际会出现一些问题:当NODE_ENV=production时,npm install不会下载devDependencies,例如webpack、Typescript项目中的@types/xxx等。从而导致npm run build失败。

解决方案

这时候可能有人会问了:我把@types/xxx丢到dependencies不就好了?

话虽如此,但是这样真的正确吗?

阅读全文 »

前情提要

已经在群晖部署了Emby+Aria2,但是番剧一直是手动下载,比较麻烦。想着能不能订阅自动下载之类的,翻了一遍Github看到了BGmi这个仓库,尝试下来体验还算不错。

部署

由于是在群晖部署,自然能用docker就用docker,BGmi也贴心提供了docker镜像。镜像除了BGmi本体之外,还包含了一个Transmission,如果没有安装Aria2的姥爷们,也可以直接使用Transmission。

ok,那么下面开始正式部署:

阅读全文 »

0. V8介绍

官方文档这么介绍:V8是谷歌开源高性能JavaScript和WebAssembly引擎,用C++编写。它主要用在Chrome和Node.js中,等等。

简单的来说,我们知道,JavaScript是解释型的语言,需要逐行解释执行

V8则是一种C++开发的JavaScript解释器,它将JavaScript编译成可执行代码,即机器码。

1. V8工作流程概述

JavaScript是解释型的语言,解释型的语言先天就有执行效率上的不足。为此,V8引擎同时采用了解释执行和编译执行这两种方式,也就是在解释执行的同时进行编译,这种方式称为JIT (Just in Time) 即时编译

解释执行:V8在执行JavaScript源码时,会先通过解析器Parser将源码解析成AST,解释器Ignition会将AST转化为字节码,一边解释一遍执行。

即时编译:Ignition同时会记录某一代码片段的执行次数,如果执行次数超过了某个阈值,这段代码便会被标记为热点代码(HotSpot),同时将运行信息反馈给优化编译器TurboFan,会将这部分热点代码的字节码优化并编译,生成机器码更高效地运行。

graph LR
  源代码 --Parser--> AST
  AST --Ignition--> 字节码
  字节码 --Ignition--> 逐行解释为机器码执行
  字节码 -.Ignition高频执行.-> HotSpot
  HotSpot --TurboFan--> 编译为机器码执行
阅读全文 »

前情提要

hexo发现经过CI之后,所有文章的 更新时间(mtime) 变成了CI运行的时间。

解决思路

在CI checkout代码时,使用文件最后一次涉及的commit时间作为文件的修改时间,进行mtime的恢复。

阅读全文 »

前情提要

公司里放了一台黑裙,但是没有公网IP,想到用openvpn拨到家里的路由器,再进行端口转发达到内网穿透,公网访问的目的。

总之的总之三步走,需要openwrt上有server,以及群晖能够有client进行拨入,最后配置端口转发


阅读全文 »

0.概念说明

一切开始的开始 先说明一些概念

物理卷(Physical Volume)即PV: 物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group)即VG: LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(Logical Volume)即LV: LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。

总之 LV建立在VG之上,VG建立在PV之上,是PV的集合,PV即物理卷。

本文的总体思路为: 扩容PV-> 扩容LV -> 扩容根目录空间

阅读全文 »

问题表现

vue.config.js中无法配置自定义devtool选项,无论是使用configureWebpack还是chainWebpack都无法改变source-map的类型。官方文档也没有提供相关的说明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// vue.config.js
const Components = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
// 两种方式均无法更改devtool
module.exports = {
configureWebpack: {
devtool: "source-map",
// 2021.10.26更新 ↓罪魁祸首
plugins: [
Components({
resolvers: [ElementPlusResolver()]
})
]
},
chainWebpack: config => {
config
.devtool('source-map')
}
}
阅读全文 »

1
sudo apt-get -o Acquire::http::proxy="http://host:port/" install xxx