async function modifyBuildAssets()

in packages/plugin-miniapp/src/targets/ali/index.ts [24:80]


async function modifyBuildAssets(assets: any, miniPlugin: any) {
    const pages: string[] = [];

    // 筛选出使用了自定义组件的页面
    miniPlugin.pages.forEach(page => {
      const config = miniPlugin.filesConfig[miniPlugin.getConfigFilePath(page.name)].content;
      if (!page.isNative && config?.hasOwnProperty('usingComponents') && Object.keys(config.usingComponents).length) {
        pages.push(page.name);
      }
    });

    if (!pages.length) return;

    const baseXml = assets[getIsBuildPluginPath('base.axml', miniPlugin.options.isBuildPlugin)].source();

    pages.forEach(page => {
      const templateName = `${page}.axml`;
      const assetsItem = assets[templateName];
      const src = assetsItem._value ? assetsItem._value.toString() : assetsItem.source();
      let relativePath;
      const templateCaller = src.replace(/<import src="(.*)base\.axml"\/>/, (_, $1) => {
        relativePath = $1;
        return '';
      });
      const main = baseXml.replace(/<import-sjs name="xs" from="(.*)utils.sjs" \/>/, () => {
        return src.includes('<import-sjs name="xs"')
          ? ''
          : `<import-sjs name="xs" from="${relativePath}utils.sjs" />`;
      });

      const res = `${templateCaller}
${main}`;
      assets[templateName] = {
        size: () => res.length,
        source: () => res,
      };
    });
    if (miniPlugin.options.isBuildPlugin) {
      const miniProjectJSONStr = JSON.stringify({
        miniprogramRoot: 'miniprogram',
        pluginRoot: 'plugin',
        compileType: 'plugin',
      }, null, 2);
      assets['mini.project.json'] = {
        size: () => miniProjectJSONStr.length,
        source: () => miniProjectJSONStr,
      };
      const pluginJSON = JSON.parse(assets['/plugin/plugin.json'].source());
      pluginJSON.publicPages = pluginJSON.pages;
      pluginJSON.pages = Object.values(pluginJSON.publicPages);
      const pluginJSONStr = JSON.stringify(pluginJSON, null, 2);
      assets['/plugin/plugin.json'] = {
        size: () => pluginJSONStr.length,
        source: () => pluginJSONStr,
      };
    }
}