hbuilderx-vanilla / docker

9 stars 5 forks source link

请问可以支持 h5 的打包吗? #1

Closed easonjim closed 4 months ago

easonjim commented 5 months ago

请问可以支持 h5 的打包吗?

flymyd commented 4 months ago

拉取本仓库及API仓库,修改build.js,将--platform app改为--platform h5即可。产物导出需要跳过packageDist.js的逻辑。然后自行构建docker。

easonjim commented 4 months ago

@flymyd 哎呀,这方法我试过了,发现不能成功,我分析出 platform 没有 h5 的,会不会是 h5 他走的打包流程不是这套 cli 了?

flymyd commented 4 months ago

我看了下,不加参数的情况下默认应该就是h5

flymyd commented 4 months ago

我看了下,不加参数的情况下默认应该就是h5

小程序平台相对特殊点。但CLI归根结底都是这套

easonjim commented 4 months ago

@flymyd 不会吧,我再去验证一下,如果成了,我再提交 pr,增加多一个选择

flymyd commented 4 months ago

@flymyd 不会吧,我再去验证一下,如果成了,我再提交 pr,增加多一个选择

我简单测试了一下,是可以的。获取最新版本的docker镜像后执行如下命令:

apt update && apt install vim -y

然后新建一个测试构建脚本:

const { exec } = require("child_process");
const { promisify } = require("util");
const path = require("path");
const os = require("os");

const execAsync = promisify(exec);

const test = async () => {
    try {
        const HBUILDER_DIR = '/opt/core';
        const UNI_INPUT_DIR = path.join('/projects', 'iserv-app');
        const VITE_ROOT_DIR = UNI_INPUT_DIR;
        const UNI_HBUILDERX_PLUGINS = path.join(HBUILDER_DIR, 'plugins');
        const UNI_CLI_CONTEXT = path.join(UNI_HBUILDERX_PLUGINS, 'uniapp-cli-vite');
        const UNI_NPM_DIR = path.join(UNI_HBUILDERX_PLUGINS, 'npm');
        const UNI_NODE_DIR = path.join(UNI_HBUILDERX_PLUGINS, 'node');
        const NODE_ENV = 'production';
        const NODE = 'node';
        const UNI_CLI = path.join(UNI_CLI_CONTEXT, 'node_modules', '@dcloudio', 'vite-plugin-uni', 'bin', 'uni.js');
        const PATH_ADDONS = process.env.PATH + `;${UNI_INPUT_DIR}/node_modules/.bin;`;
        const childEnv = {
            ...process.env,
            HBUILDER_DIR,
            UNI_INPUT_DIR,
            VITE_ROOT_DIR,
            UNI_CLI_CONTEXT,
            UNI_HBUILDERX_PLUGINS,
            UNI_NPM_DIR,
            UNI_NODE_DIR,
            NODE_ENV,
            NODE,
            PATH: PATH_ADDONS,
        };
        process.chdir(UNI_CLI_CONTEXT);
        const buildCommand = `"${NODE}" --max-old-space-size=2048 --no-warnings "${UNI_CLI}" build --platform h5 --outDir ${path.join(UNI_INPUT_DIR, 'wgt-dist')}`;
        const { stdout, stderr } = await execAsync(buildCommand, { env: { ...childEnv } });
        console.log('stdout:', stdout);
        console.error('stderr:', stderr);
    } catch (error) {
        console.error('Error during build:', error);
    }
}

test()

执行node test.js,可以看到构建结果。

flymyd commented 4 months ago

如果你的项目是Vue2的,可以参考测试脚本,或者直接使用最新镜像,添加参数vueVersion=2即可(实验性)

easonjim commented 4 months ago

@flymyd vue2的项目测试成功,打包 h5 和 mp-weixin 都没问题,我把 test2 的测试脚本提了一个 pr:https://github.com/hbuilderx-vanilla/docker/pull/2

feiyezi commented 2 months ago

用的最新的镜像,但是不成功,curl 后没有报错,就是暂停了1秒后,就没了。

ztliwen commented 2 days ago

@flymyd 大佬,如果uniapp项目,根目录没有index.html,用Hbuilderx 客户端可以打包成功,如何集成到这个docker镜像