function envFilter()

in packages/lowcode-plugin-inject/src/utils.tsx [170:230]


function envFilter(injects) {
  if (!injects) {
    return [];
  }

  const urlParams = queryString.parse(window.location.search);

  // 从 window 或者 url 中获取当前是设计器还是预览环境;没有配置则读取 window 是否有 VisualEngine
  const env = window.injectEnv || urlParams[injectEnvFlag] || (window.VisualEngine || window.LowcodeEditor || window.AliLowCodeEngine ? 'design' : 'preview') || 'design';

  let device = urlParams[injectDeviceFlag] || (window.g_config && window.g_config.device) || (window.pageConfig && window.pageConfig.device) || 'web';
  if (device === 'both') { // 乐高有双端的能力,开启后 device 是 both
    device = /Mobile/.test(window.navigator.userAgent) ? 'mobile' : 'web';
  }

  let prototypeKey = urlParams[prototypeKeyFlag] || (window.pageConfig
    && window.pageConfig.designerConfigs
    && window.pageConfig.designerConfigs.prototypeKey);
  prototypeKey = prototypeKey === 'default' ? '' : prototypeKey;

  return injects.filter((item) => {
    if (env === 'design') {
      // 设计器不需要注入组件的 view 和 vu
      if (['utils'].indexOf(item.type) >= 0) {
        return false;
      }
      // 注入指定的 prototype
      if (item.type === 'prototype') {
        if (item.subType && item.subType !== prototypeKey) {
          return false;
        }
        if (!item.subType && prototypeKey) {
          // 看有没有对应的 prototype.js 如果没有则用默认的
          const proto = injects.find(item2 => item2.packageName === item.packageName && item2.type === 'prototype' && item2.subType === prototypeKey);
          if (proto) {
            return false;
          }
        }
      }
    }
    if (env === 'preview') {
      // 预览不需要注入 prototype、vp、setter、pane
      if (['prototype', 'plugin', 'setter', 'pane'].indexOf(item.type) >= 0) {
        return false;
      }
      // PC 端应用不需要加载 view.mobile
      if (device === 'web' && item.type === 'view' && item.subType === 'mobile') {
        return false;
      }
      // 移动端应用如果有 view.mobile 则不需要加载 view,否则还是加载 view
      if (device === 'mobile' && item.type === 'view' && item.subType !== 'mobile') {
        // 看当前组件有没有 view.mobile
        const viewMobile = injects.find(item2 => item2.packageName === item.packageName && item2.type === 'view' && item2.subType === 'mobile');
        if (viewMobile) {
          return false;
        }
      }
    }
    return true;
  });
}