Alist V3自编译

前言

‪‪ 有的小伙伴想着自己编译一下 Alist
‪ 不管是出于自己想折腾还是自己想改改源码哩.大家都可以编译~ (๑•́₃ •)


编译之前的前提条件

‪ 大家可以看一下这里需要啥..

https://github.com/alist-org/alist/blob/main/CONTRIBUTING.md

‪ 编译Alist Go竟然需要 1.19+了...呜呜呜

‪ 我没记错前几个月才升级了1.18+...升级真快(´◔‸◔')”

编译之前我们需要先准备安装好以下软件:

  1. git
  2. golang 1.19+
  3. gcc
  4. nodejs
  5. pnpm

以上安装过程我就不赘述了...(安装问题都解决不了的话编译也够呛)

以上软件安装好后我们先把Go的代理改为国内的..

安装好Golang后并且也将环境变量配置好,然后win+R 输入CMD打开DDos黑窗口(这里是用的Windows)

根据自己的配置输入:

go env -w GOPROXY=https://goproxy.cn,direct      // Windows
export GOPROXY=https://goproxy.cn,direct         // macOS 或 Linux

将代理改为国内,不然编译时会出错,前人血泪史之一...

然后我们改好后看看生效没有:

CMD黑窗口输入go env查看(需要配置好环境变量哦先)
安装好默认的是:
set GOPROXY="https://proxy.golang.org,direct"
修改代理后是
set GOPROXY=https://goproxy.cn,direct

反正不管他默认的是啥,改就完事了!!!

以上就是编译前需要的准备 安装好5个软件,改一下代理 ..不难吧(ฅ'ω'ฅ)


准备编译

我们查看之前哪个文档里面有说明

https://github.com/alist-org/alist/blob/main/CONTRIBUTING.md

img

我们需要编译前肯定是要先克隆一下前端和后端的代码(clone)

执行图上的两行命令在我们安装的 git 终端里面

img

你克隆到任意地方都行建议放到一个文件夹里面去,这样我们修改的时候也方便

alist.git是后端,alist-web.git是前端
无代理
git clone https://github.com/alist-org/alist.git
git clone --recurse-submodules https://github.com/alist-org/alist-web.git

代理 - (大白提供)
git clone https://hub.cooluc.com/alist-org/alist.git
git clone --recurse-submodules https://hub.cooluc.com/alist-org/alist-web.git

‪ 前后端 拉取/克隆(clone)好了,但是我们拉取/克隆(clone)下来的前端里面只有一个 默认的英文语言文件,我们还需要去下载一个带中文的语言文件

下载地址:https://crowdin.com/project/alist/zh-CN

这里是手动下载,最傻瓜式了..

还有命令自动下的哪个我没研究明白...害,卡了好几天了这个语言文件..

img

img

语言文件放进去后我们去终端里面输入命令:

node ./scripts/i18n.mjs

执行完毕语言里面会出现一个 entry.ts 的文件,这样我们就可以用了

img

开始编译前端

‪ 安装需要的软件,修改代理,拉取(clone)前后端,下载语言文件,执行语言文件命令。以上我们都做好了我们就开始编译吧....

‪ 先执行:pnpm installnode_modules (包管理工具下载安装的包的文件夹),下载下来,别问问什么不用 npm 要用 pnpm ...问就是用 pnpm 就完了...这个也是血的教训.. %>_<%

第一次在输入VS Code里面输入 pnpm install 会报错

 如果你输入 pnpm install 出现如下图中的错误,解决方案:https://blog.zytllt.cn/257 , 如果没出现能正常编译 忽略即可!

中间自己改源码的过程就不演示了,自己想怎么改就怎怎么改,改完了 执行如下命令将前端文件进行编译: pnpm build

编译好后,会看到一个叫 “dist” 的文件夹,这个就是我们编译好的内容一会我们移动到后端里面去

img

开始编译后端

‪ 在前端编译好后我们就会看到一个 “dist” 的文件夹,我们移动一下把 “dist” 目录移动到的后端的 “public” 目录里面去即可,虽然里面已经有了一个dist文件夹,不用管直接覆盖。

img

将编译好的前端移文件动到后端里面去,准备编译

dist 目录移动到 public 去之后,我们就可以编译了(如果有改代码的需求自己改完再编译)

编译后端我们执行如下命令:

appName="alist"
builtAt="$(date +'%F %T %z')"
goVersion=$(go version | sed 's/go version //')
gitAuthor=$(git show -s --format='format:%aN <%ae>' HEAD)
gitCommit=$(git log --pretty=format:"%h" -1)
version=$(git describe --long --tags --dirty --always)
webVersion=$(wget -qO- -t1 -T2 "https://api.github.com/repos/alist-org/alist-web/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
ldflags="\
-w -s \
-X 'github.com/alist-org/alist/v3/internal/conf.BuiltAt=$builtAt' \
-X 'github.com/alist-org/alist/v3/internal/conf.GoVersion=$goVersion' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitAuthor=$gitAuthor' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitCommit=$gitCommit' \
-X 'github.com/alist-org/alist/v3/internal/conf.Version=$version' \
-X 'github.com/alist-org/alist/v3/internal/conf.WebVersion=$webVersion' \
"
go build -ldflags="$ldflags" .

‪ 有人看到这么一大坨这怎么执行...我们可以创建一个 " .sh" 后缀的文件,然后把这一坨复制粘贴进去即可,

‪ 如果怕自己创建的 .sh 后缀 文件不能用我们可以复制粘贴一个已经有的然后把里面的内容替换了即可,看我演示.

img

‪ 我们创建好了,可以直接双击执行,或者在命令行运行 这个我们刚刚修改的 run.sh 文件也行,运行好了(可能大概需要1-2分钟)目录里面会出现一个 alist.exe 的文件 这就是编译好了.我这里的Windows自然是.exe后缀的,如果是Linux,那肯定出现的是二进制文件.

img

‪ 好了,以上教程就是本次编译的教程啦... 想折腾的自己折腾吧...我稍微修改了一个然后也已经编译好了一个了..有想试试的 可以试试看...(‾◡◝)

变化:

  1. 删除了游客访问按钮
  2. 只留下了简体中文语言,并且把语言选择选择按钮删了
  3. 修改了登录窗口的logo和文字
  4. 删除了需要密码时可以看到登录选项的超链接(为了不暴露修改后的后台和登面的地址做准备我自己修改了后台地址和登录地址),这个公共就没改,我自己服务器用的改了
  5. 修改了需要密码时的文字提示
  6. 修改了后台未登录状态下界面看到的信息,同时也删除了后台在未登录看到的登录按钮超链接(防止泄露)
  7. 修改了在未登录情况下意外进入了后台看到的信息提示
  8. 把设置按钮移动到外面来了这样切换夜间模式也方便(原本想单独把夜间切换移动出来奈何不会只能这样了)

体验下载地址:https://wwn.lanzoui.com/iqfdh0dz2vda

我自己修改编译好的是Windows端的喔~(我自用在服务器部署)

视频版教程

打赏
评论区
头像
    头像
    ce
      

    请问这个教程适用freebsd吗?编译报错如下:
    invalid value "\\r\n-w -s \\r\n-X 'github.com/alist-org/alist/v3/internal/conf.BuiltAt=2024-01-18 02:38:41 +0100\r' \\r\n-X 'github.com/alist-org/alist/v3/internal/conf.GoVersion=go1.20.3 freebsd/amd64\r' \\r\n-X 'github.com/alist-org/alist/v3/internal/conf.GitAuthor=Andy Hsu mailto:i@nn.ci\r' \\r\n-X 'github.com/alist-org/alist/v3/internal/conf.GitCommit=ce06f39\r' \\r\n-X 'github.com/alist-org/alist/v3/internal/conf.Version=v3.30.0-13-gce06f39-dirty\r' \\r\n-X 'github.com/alist-org/alist/v3/internal/conf.WebVersion=3.30.0\r' \\r\n\r" for flag -ldflags: unterminated ' string
    usage: go build [-o output] [build flags] [packages]
    Run 'go help build' for details.

    头像
    阿鲁巴
      

    详细的教程 学会了 谢谢大佬

    头像
    木石.
      

    大佬请问能不能出一个Github Action的编译教程

      头像
      An_wen
        
      @木石.

      这个我也不会暂时

    头像

    sorry, unimplemented: 64-bit mode not compiled in
    大佬这个怎么解决呢

      头像
      An_wen
        
      @科技空间

      GCC的问题

        头像
        @An_wen

        重新安装gcc吗? 我刚刚试了重新安装也是报错

          头像
          An_wen
            
          @科技空间

          你找找看 怎么解决这个GCC问题,你安装的貌似不是64位的 你找找看吧 我也没遇到过这个问题QAQ

            头像
            @An_wen

            好的谢谢

    头像
    大橘为重
      

    我是build出的问题,自带终端build的,前端编译的。npnm报错[vite:load-fallback] Could not load /Users/linshaochun/alist-web-main/solid-router/src (imported by src/main.tsx): ENOENT: no such file or directory, open '/Users/linshaochun/alist-web-main/solid-router/src'
    error during build:
    Error: Could not load /Users/linshaochun/alist-web-main/solid-router/src (imported by src/main.tsx): ENOENT: no such file or directory, open '/Users/linshaochun/alist-web-main/solid-router/src'
     ELIFECYCLE  Command failed with exit code 1.

      头像
      An_wen
        
      @大橘为重

      你看看你前端的 solid-router 这个文件夹里面是不是空的..估计是空的

      这里有要加参数记得不然相关的附属不会下载
      https://blog.zytllt.cn/258#toc_3

        头像
        大橘为重
          
        @An_wen

        有没有命令参考一下,我小白哈哈哈

          头像
          An_wen
            
          @大橘为重

          我不是发了吗?带参数的前端?没看到那么大的参数吗? --recurse-submodules

          无代理
          git clone --recurse-submodules https://github.com/alist-org/alist-web.git
          国内代理
          git clone --recurse-submodules https://hub.cooluc.com/alist-org/alist-web.git

        头像
        大橘为重
          
        @An_wen

        那应该就是这个雷了,感谢大佬。我去试试

    头像

    不明觉厉

      头像
      An_wen
        
      @叶小明的博客

      傻瓜式操作即可 哈哈

    头像
    ?
      

    有没有编译Docker版本的教程

      头像
      An_wen
        
      @?

      暂时没有,不过你可以学一下如果用GitHub Action来自动化编译...
      目前俺只会Linux和Windows....

        头像
        大橘为重
          
        @An_wen

        我想转载一下您的这篇文章可以吗?我可以在文章中注明版权。

          头像
          An_wen
            
          @大橘为重

          可以滴~

            头像
            大橘为重
              
            @An_wen

            你好,能不能加下我QQ,有些问题要请教你一下。我在mac编译上出现了一些问题。

              头像
              An_wen
                
              @大橘为重

              在vscode 输入 pnpm install 有问题?(文章中补充了一下可以看下 不知道MAC的是啥自己百度一下相关的也能解决)
              其他的 环境安装没问题,Go代理也配置好,其他的没啥问题了呀~雷都排完了

                头像
                大橘为重
                  
                @An_wen

                我在试一试吧,哈哈哈。我是苹果电脑。

文章目录